Не изпълнявайте куп заявки наведнъж. Обикновено успехът на една от тях зависи от правилното изпълнение на всички други операции, така че не можете просто да стреляте с булдозер, сякаш нищо не се е объркало, когато има проблем.
Можете да го направите по следния начин:
$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();
}
Не забравяйте да активирате изключенията така че всички неуспехи на заявката ще спрат процеса ви, вместо нещото да излезе извън контрол.
Причината, поради която не използвайте multi_query
е, защото тази функция не поддържа стойности за място. Ако трябва да въведете потребителски данни от някакъв вид в тази заявка, трябва да използвате bind_param
за да го направите безопасно. Без стойности за място, вие сте изложени на грешки при SQL инжектиране и една от тях е достатъчна, за да направи цялото ви приложение уязвимо.
Струва си да се отбележи, че PDO е много по-гъвкав и адаптивен от mysqli
така че ако не сте инвестирали твърде много в mysqli
, струва си да помислите за превключвател.