Php PDO阵列插入

Php PDO阵列插入,php,mysql,arrays,pdo,Php,Mysql,Arrays,Pdo,所以阵列是按照我的要求制作的 数组的任何示例,其大小可能不同,并且在下面的数组中包含类似“bindParam(':LineValues',$sqlLineResults,PDO::PARAM_INT); $resultinsert->execute(); } 在第1行抛出错误“…使用接近“?”值的正确语法(?)”。这里有两个问题: 不能绑定表名或列名,只能绑定值 只能绑定单个值,不能绑定多个值的字符串 因此,value子句的两边都是错误的 您需要动态地构建sql语句,分别添加键值对(或两侧

所以阵列是按照我的要求制作的 数组的任何示例,其大小可能不同,并且在下面的数组中包含类似“<\/”的内容

$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();

}
$sqlTableNames=(内爆(',',$TableNames));
对于($x=0;$xbindParam(':TableValues',$sqlTableNames,PDO::PARAM_STR);
$resultinsert->bindParam(':LineValues',$sqlLineResults,PDO::PARAM_INT);
$resultinsert->execute();
}

在第1行抛出错误“…使用接近“?”值的正确语法(?)”。

这里有两个问题:

  • 不能绑定表名或列名,只能绑定值
  • 只能绑定单个值,不能绑定多个值的字符串
因此,
value
子句的两边都是错误的


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

$sqlquery=“INSERT INTO samples($sqlTableName)值(“$sqlLineResults”)”;mysql\u查询($sqlquery);为什么PDO必须如此重要harder@swifty基本上是一样的,但是您必须绑定各个变量,而不是一次绑定
$sqlquery
。这并不意味着
$sqlquery
不能包含像
:var1、:var2等字段的列表。
。我的问题是数组的长度没有定义,我是PDO的新手,我想不出如何绑定them@swifty您可以将带有键值对的数组发送到
execute()
,而不是将每个值绑定到单独的行中。可以在循环中填充/构建的数组。看,是的,效果很好,谢谢!PDO变得更容易