2013-04-02 2 views
0

У меня возникли проблемы с вставкой нескольких строк в один запрос pdo. Я использую этот код, который я сделал. Но когда я смотрю вставки в db, идентификатор автоинкремента растет, но некоторые вставки отсутствуют. Только первая вставка остается в db.php pdo несколько строк вставки

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

Вы проверили значения? var_dump ($ description) по крайней мере? –

+0

$ описание хорошее, я просто проверяю – Naviss

ответ

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(); 
} 
?> 

Посмотрите, удаляет ли некоторые данные из процесса подготовки/выполнения некоторые из ваших проблем.

+0

, хотя это правильный совет в целом, он не отвечает на вопрос –

+0

, не говоря уже о том, что привязка также должна быть удалена –

+0

Я стараюсь как входить, так и за пределы foreach как для привязки, так и для запрос – Naviss

0

Согласно http://php.net/manual/en/pdostatement.execute.php Некоторым драйверам требуется закрыть курсор перед выполнением следующего оператора.

$queryTableau->execute(); 
$queryTableau->closeCursor(); 
+0

nop, которые не меняют – Naviss