PHP中的SQL插入两行而不是一行

时间:2009-07-26 17:06:29

标签: php sql

以下代码将两条记录插入到我的数据库中,但我只希望它插入一条。为什么要两次插入行?

<?
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++;
}
?>

4 个答案:

答案 0 :(得分:2)

猜测一下,我会说这是因为它被执行了两次。 (不是很好 - 它很可能是一个控制流问题,因为似乎没有任何东西会导致上面插入两次。)

那就是说,那里有很多令人担忧的事情,例如缺少输入转移等等。例如:$ i变量的目的是什么?

答案 1 :(得分:0)

CUSTOMERS表是否至少定义了一个主键来停止重复?

如果表格中已存在列组合的CUSTOMERS表中的条目,那么您的PHP网络应用程序是否足够聪明以阻止某人访问此页面?

答案 2 :(得分:0)

我不能仅仅这样说。并且该代码几乎不可读缩进比仅存在更糟糕,并且您在查询中嵌入post变量的方式也不会使它更清晰(并且它实际上可能导致安全漏洞)。

尝试在echo $sql;怪物之后写$sql = ...。您将能够看到是否执行了两个查询,或者它是否只是一个插入两行的查询,而在最后一种情况下,它可能会给你一个很明显的原因。如果它对您没有帮助,请在那里发布您的结果,我或其他人可以查看它。但请注意,使用这种不合适的代码对我们来说并不容易或令人愉快。

答案 3 :(得分:0)

我已经完成了你的代码,我没有看到任何双重插入的原因。还有其他我们应该知道的东西吗?它不应该导致问题,但为什么代码中有一个while循环?这个页面有两次提交的方式吗?是否有触发器?