Oznacza to, że potrzebujesz transakcji .
Transakcja to zestaw zapytań, które albo wszystkie wykonują dobrze, albo jeśli jedno się nie powiedzie - wszystkie kończą się niepowodzeniem. Ma to na celu zapewnienie, że nie skończysz z bzdurnymi danymi w swoich tabelach.
Nie
- Nie używaj wielu zapytań.
- Nie używaj
mysql_*
funkcja(e). - Nie używaj wstawek zbiorczych.
Ludzie, którzy ci to mówią, po prostu nie mają pojęcia, co robią, zignoruj ich.
Tak
- Użyj PDO
- Użyj przygotowanych wyciągów
- Przygotuj zestawienia RAZ, użyj ich WIELOKROTNIE
Przykładowy kod - NIE kopiuj wklej
$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();
Powyższy kod zapisze dane w dwóch tabelach TYLKO, jeśli oba wstawienia powiodą się.