sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kører man multiple insert-forespørgsler i SQL ved hjælp af PHP på én gang?

Det betyder, at du har brug for en transaktion .

En transaktion er et sæt af forespørgsler, som enten alle udfører ok, eller hvis en fejler - de mislykkes alle. Dette er for at sikre, at du ikke ender med crap-data i dine tabeller.

Gør det ikke

  • Brug ikke multiquery.
  • Brug ikke mysql_* funktion(er).
  • Brug ikke masseindlæg.

Folk, der fortæller dig at gøre det, har bare absolut ingen anelse om, hvad de laver, ignorer dem.

Gør

Eksempelkode - kopier IKKE ind

$dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8mb4';
$user = 'dbuser';
$password = 'dbpass';

$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$insert['first'] = $pdo->prepare("INSERT INTO table SET col1 = :val, col2 = :val2");
$insert['second'] = $pdo->prepare("INSERT INTO another_table SET col1 = :val, col2 = :val2"); 

$pdo->beginTransaction();

$insert['first']->bindValue(':val', 'your value');
$insert['first']->bindValue(':val2', 'anothervalue');
$insert['first']->execute();

$insert['second']->bindValue(':val', 'your value');
$insert['second']->bindValue(':val2', 'anothervalue');
$insert['second']->execute();

$pdo->commit();

Ovenstående kode gemmer KUN dataene i to tabeller, hvis begge indsættelser lykkes.



  1. Java:Kaldning af en lagret procedure i en oracle-database

  2. MySQL:Fejlkode:1118 Rækkestørrelse for stor (> 8126). Ændring af nogle kolonner til TEXT eller BLOB

  3. Sådan bruger du MySql og Entity Framework 4.1-koden først

  4. Mysql:Indstil kolonnetegnsæt