【问题标题】:PDO array INSERT [duplicate]PDO 数组插入 [重复]
【发布时间】:2014-10-09 22:17:59
【问题描述】:

所以数组按照我想要的方式出现 数组的任何示例,它们的大小可能会有所不同,并且在下面有类似 '

$TablesNames
Array 
( 
   [0] => SampleDate 
   [1] => LAB 
) 

$LineResults
Array 
( 
  [0] => 4/08/2014 
  [1] => Micro - Water 
)

我尝试插入值的代码摘要

$sqlTableNames = (implode(',',$TableNames));

for ($x=0; $x<$Xsize; $x++) 
{
  for($y=0;$y<$MapSize;$y++)
  {     
        $LineResults[$x][$y] = $results[$x][$map[$y]];          
  }
$sqlLineResults = (implode("','",$LineResults[$x]));

$ResultsInsert = $db->prepare("INSERT INTO samples (:TableValues) VALUES (:LineValues)");   
$ResultsInsert->bindParam(':TableValues', $sqlTableNames, PDO::PARAM_STR);
$ResultsInsert->bindParam(':LineValues', $sqlLineResults, PDO::PARAM_INT);  
$ResultsInsert->execute();

}

抛出错误“...在第 1 行的 '?) VALUES (?)' 附近使用正确的语法'..”

【问题讨论】:

    标签: php mysql arrays pdo


    【解决方案1】:

    这里有两个问题:

    • 您不能绑定表名或列名,只能绑定值;
    • 只能绑定单个值,不能绑定多个值的字符串。

    所以VALUES 子句的两边都是错误的。

    您将需要动态构建您的 sql 语句,分别添加键值对(或两侧的字符串)。由于您无法绑定表名和列名,因此您应该使用白名单,以防输入来自访问者。

    【讨论】:

    • $sqlquery = "INSERT INTO samples ($sqlTableName) VALUES ('$sqlLineResults')"; mysql_query($sqlquery);为什么 PDO 必须如此困难
    • @swifty 基本上是一样的,但是你必须一次绑定单个变量而不是$sqlquery。这并不意味着$sqlquery 不能包含像:var1, :var2, etc. 这样的字段列表。只要你之后单独绑定它们。
    • 我的问题是我的数组的长度没有定义,而且我是 PDO 的新手,我想不出如何动态绑定它们
    • @swifty 您可以将带有键值对的数组发送到execute(),而不是将每个值绑定在单独的行中。您可以在循环中填充/构建该数组。见php.net/manual/en/pdostatement.execute.php
    • 是的,效果很好,谢谢! PDO 变得更容易
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多