我在一个pdo查询中插入多行时遇到了一些麻烦。 我使用了这个代码。 但是当我在db中查看插入时,autoincrement id会上升,但是有些插入缺失了。只是第一个插入保留在数据库中。
id idcom couleurb couleurf taille
169 160 blanc grisfonc Tableau L
170 161 blanc grisfonce Tableau L
172 162 blanc grisfonce Tableau L
<?php
foreach ($panier->getContenu() as $produit) {
$queryTableau = $bdd->prepare('INSERT INTO tableaux (idcommande, colorfront, colorback, size, police, mots) VALUES (:id, :cf, :cb, :si, :po, :mo)');
$queryTableau->bindParam(':id', $id);
$queryTableau->bindParam(':cf', $cf);
$queryTableau->bindParam(':cb', $cb);
$queryTableau->bindParam(':si', $si);
$queryTableau->bindParam(':po', $po);
$queryTableau->bindParam(':mo', $mo);
$description = $produit->getDescription();
$id = $_SESSION['commande']['id'];
$cf = $description['couleurFront'];
$cb = $description['couleurBack'];
$si = $produit->getNameProduit();
$po = $description['police'];
$mo = $description['mots'];
$queryTableau->execute();
}
?>
答案 0 :(得分:0)
不要对每个foreach迭代进行准备。
<?php
$queryTableau = $bdd->prepare('INSERT INTO tableaux (idcommande, colorfront, colorback, size, police, mots) VALUES (:id, :cf, :cb, :si, :po, :mo)');
foreach ($panier->getContenu() as $produit) {
$queryTableau->bindParam(':id', $id);
$queryTableau->bindParam(':cf', $cf);
$queryTableau->bindParam(':cb', $cb);
$queryTableau->bindParam(':si', $si);
$queryTableau->bindParam(':po', $po);
$queryTableau->bindParam(':mo', $mo);
$description = $produit->getDescription();
$id = $_SESSION['commande']['id'];
$cf = $description['couleurFront'];
$cb = $description['couleurBack'];
$si = $produit->getNameProduit();
$po = $description['police'];
$mo = $description['mots'];
$queryTableau->execute();
}
?>
查看您的数据与准备/执行之间的分离是否会解决您的一些问题。
答案 1 :(得分:0)
根据http://php.net/manual/en/pdostatement.execute.php某些驱动程序需要在执行下一个语句之前关闭游标。
$queryTableau->execute();
$queryTableau->closeCursor();