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插入两行而不是一行的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap:两行而不是一行的文本

使用 Restkit 上传图像 - 向 UITableView 添加两行而不是一行

如何自定义 Material ui 表格单元格,以便其中的文本将占用两行而不是一行?

Coredata 总是更新行而不是快速插入新行

将两行插入数据库表而不是一行

jquery 数据表返回倒数第二行而不是最后一行