Nespouštějte hromadu dotazů najednou. Úspěch jedné obvykle závisí na tom, zda byly všechny ostatní operace provedeny správně, takže při problému nemůžete jen tak buldozerovat, jako by se nic nekazilo.
Můžete to udělat takto:
$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();
}
Nezapomeňte povolit výjimky takže jakékoli selhání dotazu zastaví váš proces namísto toho, aby se věc vymkla kontrole.
Důvod neděláte použijte multi_query
je to proto, že tato funkce nepodporuje zástupné hodnoty. Pokud potřebujete v tomto dotazu uvést uživatelská data nějakého druhu, musíte použít bind_param
aby to bylo bezpečné. Bez zástupných hodnot jste vystaveni chybám vkládání SQL a jedna z nich stačí k tomu, aby byla zranitelná celá vaše aplikace.
Stojí za zmínku, že PDO je mnohem flexibilnější a přizpůsobivější než mysqli
pokud tedy příliš neinvestujete do mysqli
, stojí za to zvážit přepínač.