mysqldump から生成された sql ダンプがあります。このファイルには、mysql バージョン固有のコメント ( /*!{MySQL version number} {Code} */
) が含まれています。このブロックの後に SQL 構文エラーを挿入すると、PDO は例外をトリガーしません。
phpコード
$sql = file_get_contents('FooBar.sql');
$pdo = new \PDO('mysql:host=localhost;dbname=FooBar', 'root');
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$pdo->exec($sql);
FooBar.sql
/*!40101 SET @Foo='Bar' */;
ERROR
INSERT INTO Foo VALUES ('Bar');
これは、例外やエラーを引き起こすことなく実行されます。ステートメントを削除するか/*!40101 SET @Foo='Bar' */;
、エラーを行に移動すると、PDOException がスローされます。