PHP中的SQL插入两行而不是一行
Posted
技术标签:
【中文标题】PHP中的SQL插入两行而不是一行【英文标题】:SQL in PHP Inserting Two Rows Instead of One 【发布时间】:2009-07-26 17:06:29 【问题描述】:以下代码将两条记录插入我的数据库,但我只希望它插入一条。为什么要插入两次?
<?
if (!$con)
die('Could not connect: ' . mysql_error());
$i=1;
while($i<=1)
if (isset($_POST['submit']))
$sql="INSERT INTO customers
(company, salutation, first_name,
last_name, phone, email, fax,
street, town, county, postcode,
type, notes)
VALUES
('$_POST[company]',
'$_POST[salutation]',
'$_POST[first_name]',
'$_POST[last_name]',
'$_POST[phone]',
'$_POST[fax]',
'$_POST[email]',
'$_POST[street]',
'$_POST[town]',
'$_POST[county]',
'$_POST[postcode]',
'$_POST[type]',
'$_POST[notes]')";
if (!mysql_query($sql,$con))
die('Error: ' . mysql_error());
$i++;
?>
【问题讨论】:
首先,你应该明确地转义你的输入数据,使用类似 mysql_real_escape_string 的东西;第二,为什么是while循环? 也许你的代码中有一些顺序:P $_POST[company] 应该是 $_POST['company'] @Bifter:你为什么使用 while 循环? :// 【参考方案1】:我猜是因为它被执行了两次。 (不是很聪明——这很可能是控制流问题,因为似乎没有任何东西会导致上述内容按原样插入两次。)
也就是说,那里有很多令人担忧的事情,例如缺少输入转义等。例如:$i 变量的目的是什么?
【讨论】:
【参考方案2】:CUSTOMERS 表是否至少定义了一个主键来阻止重复?
如果 CUSTOMERS 表中列组合的条目已存在于表中,您的 php web 应用程序是否足够智能以阻止某人访问此页面?
【讨论】:
【参考方案3】:我不能仅从这一点说。而且该代码几乎不可读缩进比不存在更糟糕,并且您在查询中嵌入帖子变量的方式也不会使其更清晰(实际上可能会导致安全漏洞)。
尝试在你的 $sql = ...
怪物之后写 echo $sql;
。您将能够看到是否执行了两个查询,或者它是否只是一个插入两行的查询,在最后一种情况下,它可能会为您提供相当多的提示,为什么会这样做。如果它对您没有帮助,请将您的结果发布在那里,我或这里的其他人可以看看它。但请注意,使用这种不优雅的代码对我们来说并不容易或愉快。
【讨论】:
【参考方案4】:我已经完成了您的代码,但我看不出双插入的任何原因。还有什么我们应该知道的吗?它不应该导致问题,但为什么你的代码中有一个while循环?这个页面有没有办法被提交两次?有触发器吗?
【讨论】:
以上是关于PHP中的SQL插入两行而不是一行的主要内容,如果未能解决你的问题,请参考以下文章
使用 Restkit 上传图像 - 向 UITableView 添加两行而不是一行