Nie uruchamiaj wielu zapytań naraz. Zwykle sukces jednej zależy od prawidłowego wykonania wszystkich innych operacji, więc nie możesz po prostu buldożerem, jakby nic nie poszło nie tak, gdy pojawia się problem.
Możesz to zrobić w ten sposób:
$queries = [
"CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id = 1",
"UPDATE tmp SET id=100 WHERE id = 1",
"INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100"
];
foreach ($query as $query) {
$stmt = $conn->prepare($query);
$stmt->execute();
}
Nie zapomnij włączyć wyjątki tak, aby wszelkie niepowodzenia zapytania zatrzymały Twój proces, a nie wymykały się spod kontroli.
Powód, dla którego nie użyj multi_query
dzieje się tak, ponieważ ta funkcja nie obsługuje wartości zastępczych. Jeśli musisz wprowadzić jakieś dane użytkownika w tym zapytaniu, musisz użyć bind_param
aby zrobić to bezpiecznie. Bez wartości zastępczych jesteś narażony na błędy wstrzykiwania SQL, a jeden z nich wystarczy, aby cała Twoja aplikacja była podatna na ataki.
Warto zauważyć, że PDO jest o wiele bardziej elastyczne i adaptowalne niż mysqli
więc jeśli nie inwestujesz zbyt mocno w mysqli
, warto rozważyć zmianę.