PHPExcel を使用してスプレッドシートを読み取り、データを MySQL データベースにインポートする PHP コードがあります。(innoDB) インポートでデータベース内の重複レコードが検出された場合、インポートは失敗し、以前のすべての挿入がロールバックされるはずです。ロールバックが機能していません。同じように機能するこの小さなプログラムを書きました。
$conn = null;
try {
$conn=new mysqli("myServer","user","password", "moveforward");
$conn->autocommit(FALSE);
$sql="insert into series (seriesLocation,seriesName,seriesDate) values('1','2','2013-05-21')";
echo "Executing query 1<br>";
$conn->query($sql);
if($conn->error!="") {
$sqlError=$conn->error;
$conn->rollback();
echo "Rollback complete<br>";
throw new Exception($sqlError);
}
//This will throw a duplicate exception
echo "Exceuting query 2<br>";
$conn->query($sql);
if($conn->error!="") {
$sqlError=$conn->error;
$conn->rollback();
echo "Rollback complete<br>";
throw new Exception($sqlError);
}
echo "You shouldn't be here<br>";
$conn->commit();
echo "Transactions comitted<br>";
} catch (Exception $e) {
echo "Exception: " . $e->getMessage() . "<br>";
}
$conn->close();
echo "Done<br>";
PHPマニュアルを見て、ここの他の投稿をチェックすると、これはうまくいくように見えます。実行すると、次のようになります。
Executing query 1
Exceuting query 2
Rollback complete
Exception: Duplicate entry '2' for key 'seriesName'
Done
しかし、データベースをチェックすると、最初の挿入からのデータがそこにあります。
何か案は?