Encontrei a resposta usando uma declaração preparada. Depois de percorrer todos os conjuntos de linhas, posso verificar se a última consulta executada causou um erro usando
$stmt->errorInfo()
. $db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$sql = "
DELETE FROM car;
INSERT INTO car(name, type) SELECT name, from FROM vehicle;
";
$stmt = $db->prepare($sql);
$stmt->execute();
$i = 0;
do {
$i++;
} while ($stmt->nextRowset());
$error = $stmt->errorInfo();
if ($error[0] != "00000") {
echo "Query $i failed: " . $error[2];
die();
}