繁体   English   中英

使用PDO插入多行

[英]insert multiple rows using PDO

此代码有什么问题? 我想插入具有相同电影ID和不同演员ID的多行。 当我用$ actors = array(1,2,3,4)运行它时; (或任何值),并且$ movid = 1,所有四行均作为值(1、4)插入。

$create_query = "INSERT INTO `tableName`(`movId`, `actId`) VALUES";
$comma = "";
foreach ($actors as $key=>$value) {
    $create_query .= $comma . "(:movie" . $key . ", :actor" . $key . ")";
    $comma = ", ";
}
$query = $db->prepare($create_query);
foreach ($actors as $key=>$value) {
    echo $movid . ', ' . $value //correct output (1, 1), (1, 2) ...
    $query->bindParam(":movie" . $key, $movid, PDO::PARAM_INT);
    $query->bindParam(":actor" . $key, $value, PDO::PARAM_INT);
}
print_r($query);
//output is
/*INSERT INTO `tableName`(`movId`, `actId`) VALUES(:movie0, :actor0), (:movie1, :actor1), (:movie2, :actor2), (:movie3, :actor3)*/
if ($query->execute()) {
    $return = $query->rowCount();
    $query->closeCursor();
}

当我使用单独的查询进行插入时,它可以正常工作。

使用PDOStatement::bindValue()代替PDOStatement::bindParam() 后者将通过引用绑定,并且由于您使用的变量随每次循环迭代而变化,因此最终您尝试将所有内容绑定到同一对象。

PDOStatement::bindParam()文档中

与PDOStatement :: bindValue()不同,该变量绑定为引用,并且仅在调用PDOStatement :: execute()时进行评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM