5

以下は私の質問です

 $db= new mysqli('localhost','user','passcode','dbname');
try {
// First of all, let's begin a transaction
$db->beginTransaction();

// A set of queries; if one fails, an exception should be thrown
$query1="insert into table1(id,name) values('1','Dan')";
$query2="insert into table2(id,name) values('2','Anaba')";

// If we arrive here, it means that no exception was thrown
// i.e. no query has failed, and we can commit the transaction
$db->commit();

} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$db->rollback();
}

php を介して mysql クエリにトランザクションを実装しようとしています。クエリの 1 つが失敗したときにすべてのクエリを失敗させたいと考えています。上記のコードはエラーをスローします (「致命的なエラー: 未定義のメソッド mysqli::beginTransaction() への呼び出し」)。問題を解決するためのより良い解決策またはアイデアはありますか?

4

3 に答える 3

10
$db->begin_transaction();

いいえ

$db->beginTransaction();

http://www.php.net/manual/en/mysqli.begin-transaction.php

PHP 5.5 より前の場合は、

$db->autocommit(true);

代わりは

于 2013-07-12T22:35:29.237 に答える
2

ドキュメントによると、begin_transaction()PHP 5.5 の新機能です。(数週間前にリリースされたばかり)

存在しないというエラーが表示される場合は、古いバージョンの PHP を使用している可能性があります。

PHP 5.5 を実行していると思われる場合は、同じスクリプトで次のコードを実行して、PHP のバージョンを確認してください。

echo(phpversion());

マシン上に複数のバージョンの PHP が存在する場合があり、実際にはスクリプトが実行されていると思われるバージョンで実行されないことがあります。

于 2013-07-12T23:15:46.223 に答える