Inserer les valeurs d'un array dans une requete
Résolu
LearnDeep
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour , je veux inserer les valuers d'un array dans une requete insert into mais elle ne fonctionne pas et je ne trouve pas les valeurs insérée dans la base de données.
La table regrouper contient les champs : (refCommande, refProduit, prixP, qteP)
le array contient les valeurs :
Array
([0]=> stdClass Object([idprod]=>8[prix]=>2[qte]=>1[refCmd]=>35)[1]=> stdClass Object([idprod]=>9[prix]=>2.4[qte]=>5[refCmd]=>35)) </code>
le console envoi les erreur suivantes :
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: X-Custom-Header, Origin, Content-Type , Authorisation , X-Requested-With");
header("Content-Type: application/json; charset=UTF-8 ");
$json = file_get_contents('php://input');
$decoded = json_decode($json);
$tab = $decoded->tab;
function conn()
{
$dbhost = "localhost";
$user = "root";
$pass = "";
$db = "smart";
$conn = new PDO('mysql:host=localhost;dbname=smart', $user, $pass);
return $conn;
}
$db = conn();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$p = $db->prepare("INSERT INTO regrouper (refCommande, refProduit, prixP, qteP) VALUES(:refCmd,:refProduit,:prix,qte)");
foreach ($tab as $item) {
$p->execute($item);
}
echo json_encode(true);
?>
La table regrouper contient les champs : (refCommande, refProduit, prixP, qteP)
le array contient les valeurs :
<code>
Array
([0]=> stdClass Object([idprod]=>8[prix]=>2[qte]=>1[refCmd]=>35)[1]=> stdClass Object([idprod]=>9[prix]=>2.4[qte]=>5[refCmd]=>35)) </code>
le console envoi les erreur suivantes :
<br />
<b>Warning</b>: PDOStatement::execute() expects parameter 1 to be array, object given in <b>C:\xampp\htdocs\SmartLibrary\api\insert.php</b> on line <b>29</b><br />
<br />
<b>Warning</b>: PDOStatement::execute() expects parameter 1 to be array, object given in <b>C:\xampp\htdocs\SmartLibrary\api\insert.php</b> on line <b>29</b><br />
<br />
<b>Warning</b>: PDOStatement::execute() expects parameter 1 to be array, object given in <b>C:\xampp\htdocs\SmartLibrary\api\insert.php</b> on line <b>29</b><br />
<br />
<b>Warning</b>: PDOStatement::execute() expects parameter 1 to be array, object given in <b>C:\xampp\htdocs\SmartLibrary\api\insert.php</b> on line <b>29</b><br />
true
A voir également:
- Inserer les valeurs d'un array dans une requete
- Insérer une vidéo dans powerpoint - Guide
- Insérer signature word - Guide
- Insérer un espace insécable dans word - Guide
- Insérer liste déroulante excel - Guide
- Insérer un tableau dans word - Guide
1 réponse
Bonjour,
Déjà... pour le PDO .. il faut correctement activer ET gérer les éventuelles erreurs.
Pour ça, applique ce qui est indiqué dans ce lien
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ensuite...
L'instruction EXECUTE attend la liste de TOUS les paramètres que tu as mis dans le PREPARE de ta requête... (et avec le MEME nom ... )
Dans ton cas;.. il attend donc les paramètres suivants :
Donc un ARRAY de la forme
Tu nous dis que ton array contient :
</code>
Donc.. oui.. tu as un ARRAY ... mais ton array est constitué d' OBJET
Il te faut donc Extraire les différentes valeurs de cet objet... pour construire l'ARRAY attendu dans le execute.
ce qui donnerait un truc du genre :
Déjà... pour le PDO .. il faut correctement activer ET gérer les éventuelles erreurs.
Pour ça, applique ce qui est indiqué dans ce lien
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ensuite...
L'instruction EXECUTE attend la liste de TOUS les paramètres que tu as mis dans le PREPARE de ta requête... (et avec le MEME nom ... )
Dans ton cas;.. il attend donc les paramètres suivants :
:refCmd,:refProduit,:prix,qte
Donc un ARRAY de la forme
array(':refCmd'=>35 ,':refProduit'=>1 ,':prix' =>2.4 , 'qte'=>1 );
Tu nous dis que ton array contient :
([0]=> stdClass Object([idprod]=>8[prix]=>2[qte]=>1[refCmd]=>35)[1]=> stdClass Object([idprod]=>9[prix]=>2.4[qte]=>5[refCmd]=>35))
</code>
Donc.. oui.. tu as un ARRAY ... mais ton array est constitué d' OBJET
stdClass Object
Il te faut donc Extraire les différentes valeurs de cet objet... pour construire l'ARRAY attendu dans le execute.
ce qui donnerait un truc du genre :
try{ $p = $db->prepare("INSERT INTO regrouper (refCommande, refProduit, prixP, qteP) VALUES(:refCmd,:refProduit,:prix,:qte)"); foreach ($tab as $item) { $datas = array(':refCmd'=>$item->refcmd ,':refProduit'=>$item->idprod ,':prix' =>$item->prix , ':qte'=>$item->qte ); $p->execute($datas); } }catch(Exception $e){ echo " Erreur :" . $e->getMessage(); }