簡體   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