【问题标题】:PHP - inserting multiple rows from an array gives invalid outputPHP - 从数组中插入多行会产生无效的输出
【发布时间】:2018-07-20 13:57:38
【问题描述】:

我正在尝试通过使用 implode 函数创建 INSERT STATEMENT 从数组中插入多行。我无法弄清楚为什么我得到超过 2 行的 INSERT STATEMENT 行,因为只有 2 行。

这个链接我也看了,还是不开心insert multiple rows via a php array into mysql

请帮忙!

下面是我的代码:

while ($row = sqlsrv_fetch_array($getResults,SQLSRV_FETCH_ASSOC))
{
    foreach ($row as $v) {
        $sql[] = "(".$row['ReportName'].");";   
    }
    $test = "INSERT INTO PublishedComments (ReportName) VALUES ".implode(",",$sql);
    echo $test;
    echo "<br />...........<br />";
}

输出如下:

INSERT INTO PublishedComments (ReportName) VALUES (Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);
...........
INSERT INTO PublishedComments (ReportName) VALUES (Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);,(Report Sales Per Order Method Type);
...........

【问题讨论】:

  • 输出也有一个尾随逗号,并且正在重复这些值。
  • 我不认为你真的想要 foreach 在那里

标签: php sql-server multiple-columns


【解决方案1】:

如果您尝试将整行作为批量插入插入,您可能希望从 while 循环中取出插入查询 同时删除 foreach 和“;”在 "('".$row['ReportName']."');"; 的末尾;

while ($row = sqlsrv_fetch_array($getResults,SQLSRV_FETCH_ASSOC))
{

    $sql[] = "('".$row['ReportName']."')"; 
}
$test = "INSERT INTO PublishedComments (ReportName) VALUES ".implode(",",$sql) . ';'; // Add semicolon
echo $test;
echo "<br />...........<br />";

【讨论】:

  • 如果我将它从 while 循环中取出,它不会创建 2 个插入语句,因此输出将是 INSERT INTO PublishedComments (ReportName) VALUES ('Report Sales Per Order Method Type') ,('Report按订单销售方法类型') ; ……
  • 除非您没有对插入查询做任何事情,否则这两个查询都将插入到具有相似类型数据的同一个表中。所以你不必插入两次。
【解决方案2】:

两个问题:

首先,你的价值观没有被'包围。

其次,每组以分号;结尾,但应该是逗号,

第三,在 cmets 中指出,您正在循环使用 while(),然后再次使用 foreach()... 这肯定不是您想要的:}

while ($row = sqlsrv_fetch_array($getResults,SQLSRV_FETCH_ASSOC))
{

    $sql[] = "('".$row['ReportName']."'),"; // Add apostrophes, change to comma
    $test = "INSERT INTO PublishedComments (ReportName) VALUES ".implode(",",$sql) . ';'; // Add semicolon
    echo $test;
    echo "<br />...........<br />";
}

【讨论】:

  • 感谢您的及时回复,输出如下,它在某种程度上连接了第二个 INSERT into 语句中的值:
    INSERT INTO PublishedComments (ReportName) VALUES ('Report Sales Per Order方法类型') ; ......
    INSERT INTO PublishedComments (ReportName) VALUES ('Report Sales Per Order Method Type') ,('Report Sales Per Order Method Type') ; ......
  • 谢谢大家,@Rakesh 是的,我现在知道了,再次感谢。
猜你喜欢
  • 2013-08-02
  • 1970-01-01
  • 2016-11-12
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多