PDO MySQL: Insérer plusieurs lignes en une seule requête
Bonjour, je fais une classe pour la réalisation de plusieurs insérer dans l'aop.
C'est quelque chose comme cela
INSERT INTO $table (key1,key2,key3,etc) VALUE (value1,value2,value3,etc), (value1,value2,value3,etc), (value1,value2,value3,etc)
Après recherche j'ai découvert que j'ai pour bâtir quelque chose comme
INSERT INTO $table (key1,key2,key3,etc) VALUE (:key1,:key2,:key3,etc), (:key1,:key2,:key3,etc), (:key1,:key2,:key3,etc)
puis l'exécuter avec cette $this->execute($data);
où $data
est
0 =>
array
'key1' => 'value1'
'key2' => 'value2'
'key3' => 'value3'
1 =>
array
'key1' => 'value1'
'key2' => 'value2'
'key3' => 'value3'
etc
le problème est que j'obtiens toujours une erreur Array to string conversion
sur $insert->execute($data);
comment puis-je régler ce problème?
voici un extrait de ce que je suis en train de faire.
public function multipleInsert($table, $data = array())
{
# INSERT (name) VALUE (value),(value)
if (count($data) > 1)
{
$fieldnames = array_keys($data[0]);
$count_inserts = count(array_values($data));
$count_values = count(array_values($data[0]));
# array(????) untill x from first data
for($i = 0; $i < $count_values; $i++)
{
$placeholder[] = '?';
}
# array((????),(????),(????)) for query
for ($i=0; $i < $count_inserts; $i++)
{
$placeholders[] = '('. implode(',',$placeholder) . ')';
}
$query = 'INSERT INTO '. $table;
$query .= '(`'. implode('`, `', $fieldnames) .'`)';
$query .= ' VALUES '. implode(', ', $placeholders);
$insert = $this->start->prepare($query);
$i = 1;
foreach($data as $item)
{
foreach ($item as $key => $value)
{
$insert->bindParam($i++, $item[$key]);
}
}
echo $query;
$insert->execute();
$return['status'] = true;
$return['lastid'] = $this->start->lastInsertId();
return $return;
}
else
{
die('$data is less then two array, use single insert instead.');
}
}
OriginalL'auteur Adam Ramadhan | 2012-04-08
Vous devez vous connecter pour publier un commentaire.
Un moyen facile pour cette évitant les complications serait quelque chose comme ceci
Toutefois, cela exécute l'instruction plusieurs fois. Donc, il est préférable de créer une seule requête pour ce faire.
Voici un exemple de comment on peut faire cela.
Comme je vous l'ai dit c'est une façon de le faire en évitant les complications. Je vais mettre à jour avec la combinaison un peu plus tard.
merci s'accoupler! vraiment vous remercie de votre temps.
ne serait-ce pas jeter une erreur de syntaxe SQL, car il y a une gauche "," dans la requête? Je trouve étrange que PDO ne comprend pas un moyen de lier les tableaux de valeurs
Il ne fonctionnera pas parce qu'il fait toujours le dernier
$item
valeur de la boucle depuisbindParam
œuvres par référence et non par valeur. Vous avez besoin d'utiliserbindValue
à la place.OriginalL'auteur Starx