PHP插入表不创建新的数据行

Posted

技术标签:

【中文标题】PHP插入表不创建新的数据行【英文标题】:PHP Insert into table not creating new line of data 【发布时间】:2017-07-18 12:35:34 【问题描述】:

我是 php 新手,我正在尝试将数据从嵌套数组插入数据库。我注意到只有最后一个 key:value 被放入(似乎之前的所有其他内容都被覆盖了)。如何获取每个数据的新行以便将所有内容放入其中?

 $tmpArray = array(array("one" => abc, "two" => def), array("one" => ghi, "two" => jkl));

 //  Scan through outer loop
 foreach ($tmpArray as $innerArray) 
    //  Scan through inner loop
    foreach ($innerArray as $key => $value) 
        if ($key === 'one') 
             $sql = "INSERT INTO test2 (alpha, beta) VALUES ('$key', '$value')"; 
        
    
 

为简单起见,我要做的就是将“one”和“abc”放入 alpha 和 beta 中。然后让表格的另一行输入“one”和“ghi”。但是当我运行代码时,我得到的只是“one”和“ghi”。但是,当我放一个 echo 语句时,所有正确的东西都会被打印出来。只是不明白为什么他们没有输入我的表格。

我做错了什么?谢谢!

【问题讨论】:

你在哪里执行SQL语句?如果您在循环之外执行此操作,它只会插入最后一个值,因为 $sql 每次通过循环时都会被覆盖。 【参考方案1】:
$sql = "INSERT INTO test2 (alpha, beta) VALUES ('$key', '$value')"; 

此行在每次调用时都会覆盖变量$sql 的内容。您需要将字符串连接在一起:

$sql = '';
//  Scan through outer loop
foreach ($tmpArray as $innerArray) 
    //  Scan through inner loop
    foreach ($innerArray as $key => $value) 
        if ($key === 'one') 
            $sql .= "INSERT INTO test2 (alpha, beta) VALUES ('$key', '$value'); "; 
        
    
 

更好的是,正如评论中所建议的那样,直接执行查询而不是将其存储在变量中。这样您就不必将字符串连接在一起,也不必在单个 MSQLI 调用中启用多个语句。

【讨论】:

这只有在他们使用 mysqli 的 multi_query 时才有效。最好在循环内运行sql语句。 @aynber 你是对的,但如果我以这种方式回答,那么我将无法解决作为提问者问题根源的更深刻的错误。 @aynber 我已经编辑了我的问题以添加您的想法,因为您是对的,这是更好的方法。

以上是关于PHP插入表不创建新的数据行的主要内容,如果未能解决你的问题,请参考以下文章

插入表,如果表不存在,则创建表然后插入

将存储过程数据插入临时表不起作用

SQL Server如何将查询的内容保存到新的sql 表中

BigQuery [PHP] InsertAll:未显示任何错误,但 BigQuery 表不受插入值的影响

PHP - MySQL - 表不存在

Excel:数据透视表不过滤