php pdo多行插入

时间:2013-04-02 17:08:29

标签: php mysql pdo

我在一个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();
}
?>

2 个答案:

答案 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();