Kör inte en massa frågor på en gång. Vanligtvis beror framgången för en på att alla andra operationer har utförts korrekt, så du kan inte bara bulldozera som om inget har gått fel när det finns ett problem.
Du kan göra så här:
$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();
}
Glöm inte att aktivera undantag så att eventuella frågefel kommer att stoppa din process istället för att det går över styr.
Anledningen till att du inte använd multi_query
beror på att den funktionen inte stöder platshållarvärden. Om du behöver införa användardata av något slag i den här frågan måste du använda bind_param
för att göra det säkert. Utan platshållarvärden utsätts du för SQL-injektionsbuggar, och en enda av dessa är tillräckligt för att göra hela din applikation sårbar.
Det är värt att notera att PDO är mycket mer flexibel och anpassningsbar än mysqli
så om du inte är för hårt investerad i mysqli
, det är värt att överväga att byta.