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

$what 是 get-data-from-csv-function 的值,所以我们不知道它是多少。我自己试试,PDO不能做这个查询。我应该做什么查询?

4

1 回答 1

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);
}

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

于 2013-08-22T10:35:58.463 回答