Insérer plusieurs lignes dans une table en php et sql
jordane45 Messages postés 40050 Statut Modérateur -
Bonjour,
mon problème est le suivant: j'essaye d'insérer dans une table (après donnée modifiées) plusieurs lignes de données que j'ai récupérer d'une première table avec une requête select
La fonction s'exécute mais j'ai seulement la première ligne des données qui subit l'insertion dans la nouvelle table
Je veux ainsi que ça se répète pour toutes les lignes de données.
j'ai pensé utiliser un foreach et j'obtenais un msg d'erreur qui me renvoyais vers mon fichier dbcontroller plus précisément vers la fonction que j'appelle pour exécuter la requête. je ne sais plus quel était le message d'erreur mais ça avait un rapport avec le fait que mes valeurs sont des booléens et non sous forme d'un tableau (array)
Je code en php
voici ma fonction :
$dbcontroller = new DBController();
$result = "";
$stmt1 = mysqli_prepare($dbcontroller->getConn(), "SELECT reference, numero, idetat, id_emplacement FROM balancelles WHERE reference = ?");
mysqli_stmt_bind_param($stmt1, 'i', $id);
$data1 = $dbcontroller->executeSelectQueryMSQL($stmt1);
$stmt2 = mysqli_prepare($dbcontroller->getConn(), "SELECT idetat FROM etats WHERE idetat = 0");
$data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
$stmt3 = mysqli_prepare($dbcontroller->getConn(), "SELECT id FROM emplacement WHERE id = 0");
$data3 = $dbcontroller->executeSelectQueryMSQL($stmt3);
//foreach($data1 as $data1){ <-- la où j'ai testé le forEach
if ($data1 && $data2 && $data3){
setlocale(LC_TIME, "fr_FR.UTF-8");
$date = new DateTime();
$date = strftime("%Y-%m-%d %H:%M:%S", $date->getTimestamp());
$stmtAction = mysqli_prepare($dbcontroller->getConn(), "INSERT INTO actions (reference, numero, date_heure, idetat, id_emplacement) VALUES (?,?,?,?,?)");
mysqli_stmt_bind_param($stmtAction, 'sssss', $data1[0]['reference'], $data1[0]['numero'], $date, $data2[0]['idetat'], $data3[0]['id']);
$dataAction = $dbcontroller->executeSelectQueryMSQL($stmtAction);(pb à cette ligne)
... }
//}
La fonction concernée dans mon dbcontroller
function executeSelectQueryMSQL($stmt)
{
$stmt->execute();
$meta = $stmt->result_metadata();
while($field = $meta->fetch_field()){
$params[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
while($stmt->fetch()){
foreach($row as $key => $val){
$c[$key] = $val;
}
$resultset[] = $c;
}
$this->freeStatementSql($meta);
if (!empty($resultset)) {
return $resultset;
} else {
return "";
}
}
Merci par avance de votre aide
- Insérer plusieurs lignes dans une table en php et sql
- Insérer une vidéo dans powerpoint - Guide
- Table ascii - Guide
- Comment insérer une table des matières dans word - Guide
- Insérer signature word - Guide
- Insérer liste déroulante excel - Guide
1 réponse
Bonjour
Pour commencer il faudrait une seule requête SELECT (avec des jointures) au lieu de faire trois requêtes distinctes qui n'ont pas de lien entre elles..
Une fois que ce sera fait tu pourras en effet faire une boucle afin de traiter chaque ligne de ta requête SELECT.
Au passage, ta classe dBcontroller ne sert à rien
. À croire que tu as essayé de modifier un code qui tournait avant avec l'ancienne extension mySQL...
Pourrais remplacer ce code par l'utilisation d'un fetchfall
https://www.php.net/manual/fr/mysqli-result.fetch-all.php