2013-08-22 500 views
-1
$what = "(999,'string','string2'),(21,'aaaa','bbbbb'),(22,'ccccc','ddddd')"; 
include("../connect/pdoconnect.php"); 
try { 

$sql = $db->prepare("INSERT INTO `bd_fortest` (`user_ID`, `picturename`, `picturepath`) VALUE :what"); 
$sql->execute(array(":what"=>$what)); 


} 
catch(PDOException $e) { 
    echo "\nPDO::errorInfo():\n"; 
    print_r($db->errorInfo()); 
} 

$ get-data-from-csv-function的值是多少,所以我们不知道它有多少。 我自己试试,PDO不能做这个查询。我该怎么做?PDO如何执行此查询?

+0

占位符用于插入*值*,因此它们可以从代码中正确分离。如果您使用它们来插入*代码* PDO将*不*代码处理它,因为这正是它应该做的。 –

+0

如果您正在从某个地方的数组中生成$ what,那么PDO准备好的语句应该是该数组循环的目标。 – Cups

+0

Bug修复。谢谢大家:) – crazyoxygen

回答

3

你不能用一个占位符做到这一点。只有在允许普通表达式的情况下才允许占位符,并且值列表不是一个表达式。

因此,您需要使用字符串插值/连接,如在Gautam3164的答案中,或者使用一次一圈插入单行的循环,例如,

$whats = array(array('userid' => 999, 'picturename' => 'string', 'picturepath' => 'string2'), 
       array('userid' => 21, 'picturename' => 'aaaa', 'picturepath' => 'bbbbb'), 
       array('userid' => 22, 'picturename' => 'ccccc', 'picturepath' => 'ddddd') 
      ); 
$sql = $db->prepare("INSERT INTO `bd_fortest` (`user_ID`, `picturename`, `picturepath`) VALUES (:userid, :picturename, :picturepath)"); 
foreach ($whats as $what) { 
    $sql->execute($what); 
} 

如果使用字符串连接,将失去对参数化语句的保护。您需要确保所有字符串都已正确清理或转义。

+0

谢谢。我会尝试:) – crazyoxygen

+0

@Batmar为你+1 ...尼斯和 – Gautam3164

+0

嗯,我尝试和它显示致命错误:调用一个非对象的成员函数prepare()。 – crazyoxygen