【发布时间】:2014-08-04 21:13:23
【问题描述】:
我在 PDO 中使用INSERT INTO ON DUPLICATE KEY 查询绑定值时遇到了问题。
我得到的错误是SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens。
SQL 的构建似乎是正确的:
INSERT INTO `mytable` (user_name,user_id)
VALUES (?,?) ON DUPLICATE KEY UPDATE user_name = ?,user_id = ?
我认为它需要再次将相同的值绑定到 ON DUPLICATE KEY UPDATE 子句的 foreach 循环中的参数是否正确?谁能告诉我怎么做?
$update_fields .= $comma.$filter. " = ?";
$filters = array("user_name"=>"User Name","user_id"=>"User ID");
$field = "";
$comma = "";
foreach ($filters as $filter => $title) {
$filterVar = "post_".$filter;
$$filterVar = (isset($_POST["$filterVar"]) ? $_POST["$filterVar"] : "");
if ($$filterVar) {
$fields .= $comma.$filter;
$values .= $comma.$$filterVar;
$update_fields .= $comma.$filter. " = ?";
$comma = ",";
}
}
$values_arr = explode(',',$values);
$in = str_repeat('?,', count($values_arr) - 1) . '?';
$sql .= "INSERT INTO `mytable` ($fields) VALUES ($in)";
$sql .= "ON DUPLICATE KEY UPDATE $update_fields ";
$users = $dbh->prepare($sql);
print $sql;
$i = 1;
foreach ($values_arr as $value) { // binding values
$users->bindValue($i++, $value);
}
$users->execute($values_arr);
【问题讨论】: