Php PDO多重插入的问题
下面是我的php脚本的一部分,其中肯定缺少一些内容:Php PDO多重插入的问题,php,pdo,Php,Pdo,下面是我的php脚本的一部分,其中肯定缺少一些内容: $startIndex = 7; $endIndex = 303; $defaults = range($startIndex, $endIndex); $sql = "INSERT INTO items (itemId, userId) VALUES "; $part = array_fill(0, count($defaults), "(?, ?)"); $sql .= implode(",", $part); try { $db
$startIndex = 7;
$endIndex = 303;
$defaults = range($startIndex, $endIndex);
$sql = "INSERT INTO items (itemId, userId) VALUES ";
$part = array_fill(0, count($defaults), "(?, ?)");
$sql .= implode(",", $part);
try {
$db = DB::getInstance();
$stmt = $db->dbh->prepare($sql);
$i = 1;
foreach($defaults as $default) {
$stmt->bindParam($i++, $default);
$stmt->bindparam($i++, $userId);
}
if ($stmt->execute()) {
echo "result=ok";
}else {
echo 'invalid query';
}
}catch(PDOException $e) {
echo $e->getMessage();
}
多个插入正在发生,一切似乎都很好,除了所有的itemId字段都以303($defaults数组中的最后一个元素)的形式出现。foreach循环似乎如我所期望的那样工作,因为$default的回声给出了我所期望的int序列。所以,这一定是绑定的问题
请帮助:)这里发生的是将参数绑定到
$default
变量,而不是它的值
循环$defaults
数组时,$defaults
的值会发生变化。绑定参数正在使用引用,而不是副本
您可以更改循环和绑定参数以引用数组项:
foreach($defaults as $key => $default) {
$stmt->bindParam($i++, $defaults[$key]);
$stmt->bindparam($i++, $userId);
}
bindParam
需要引用。它将变量而不是值绑定到语句
您可以通过引用传递来解决此问题:
foreach($defaults as &$default) { //pass $default as a reference (&)
$stmt->bindParam($i++, $default); // bind the variable to the statement
}
或者通过传递值并使用bindValue而不是bindParam:
foreach($defaults as &$default) {
$stmt->bindValue($i++, $default); // bind the value to the statement
}