Comment faire un bloc de base de données insérer dans Yii2?
Je me demande comment vous allez faire sur une base de données en vrac INSERT
dans Yii2
?
Par exemple un normal INSERT
je voudrais donc:
$sql = $this->db("INSERT INTO some_table(id,my_value) VALUES(:id,:my_value)");
$sql->bindValues([':id' => $id, ':my_value' => $my_value]);
$sql->execute();
Maintenant, si je voulais créer un bloc INSERT
?
Sans valeurs contraignantes vous pourrait-il quelque chose comme:
foreach ($foo as $bar) {
$data_sql .= '(' . $id . ',' "'" . $bar . "'),"
}
$data_sql = rtrim($data_sql, ',');
$sql = $this->db("INSERT INTO some_table(id,my_value) VALUES" . $data_sql);
$sql->execute();
Mais comment pouvez-vous arriver si vous voulez toujours de lier les valeurs?
Edit: Cette question n'est pas la même sur le site car je ne suis pas à l'aide de ActiveRecord
.
Edit 2:
Idéalement, il serait bien si il y avait une solution qui offrait un peu de souplesse, comme le fait d'être capable d'écrire plus de votre propre syntaxe, comme l'une des réponses postées ci-dessous:
Yii::$app->db->createCommand()->batchInsert('tableName', ['id', 'title', 'created_at'], [
[1, 'title1', '2015-04-10'],
[2, 'title2', '2015-04-11'],
[3, 'title3', '2015-04-12'],
])->execute();
...n'offre pas que. Pour cette situation, j'ai besoin d'utiliser la IGNORE
de déclaration, que la solution ci-dessus n'offre pas.
INSERT INTO some_table(id,my_value) VALUES (?, ?),(?, ?),(?, ?),(?, ?)
et remplissent?Eh bien, j'avais pensé à faire quelque chose de similaire en ajoutant des numéros à la fin de chaque espace réservé, mais espérais qu'il y a une meilleure façon.
double possible de ActiveRecord insertion de lot (yii2)
OriginalL'auteur Brett | 2015-04-11
Vous devez vous connecter pour publier un commentaire.
Il y a un spécial batchInsert méthode:
Je suppose que cela a le même niveau de sécurité que lorsque vous liez des valeurs où vous n'avez pas besoin de désinfecter les données avant de les transmettre? Aussi, le malheureux problème c'est que ce n'est pas très souple, comme si vous voulez utiliser d'autres trucs dans la requête comme
INSERT IGNORE
.Cette méthode est sécurisé car il utilise des méthodes spéciales pour les valeurs citant. Et si vous avez besoin de vous peut extraire de sa dernière requête sql et de les modifier.
Je suppose que si vous avez de l'extrait de la requête puis d'utiliser quelque chose comme
IGNORE
dans la déclaration que vous aurez besoin de faire unstr_replace
commestr_replace('INSERT', 'INSERT IGNORE', $query)
?Oui, je voudrais essayer cette.
OriginalL'auteur Pavel Bariev
Ce code lient les valeurs comme des espaces réservés sans ActiveRecord
OriginalL'auteur atrichkov