顧客を自動的にインポートするために、hikashop (eshop コンポーネント) コンポーネントを使用して joomla(2.5) を作成しています。問題は、期待どおりに機能しない JDatabase トランザクションを使用していることです (ロールバックが機能しません)。メソッド processSingle は各顧客を処理し、成功したかどうかを返します。また、デバッグのために、どのメソッド (ステップ) が失敗したかを知るためのパラメーターがもう 1 つあります。同じロールバック構造を使用する別のスクリプトを作成しましたが、機能しているように見えますが、これは機能しません。DatabaseException をキャッチしようとしましたが、例外はありません。トランザクションのロールバックに失敗するコードの一部があります。
foreach ($this->customerList as $customer) {
// start tracking database entries
$this->db->transactionStart();
$oCustomer = new stdClass();
$oCustomer->raw_data = $customer;
// escaping from sql injection
$oCustomer = $this->escapeObj($oCustomer);
// here we process all items taking one and going through all steps
$methodfailed = "";
$success = $this->processSingle($oCustomer, $methodfailed);
$processed++;
if ($success) {
$succeeded++;
// if succeded save changes
$this->db->transactionCommit();
} else {
$failed++;
echo $this->error . "<br/>";
echo "failed method:" . $methodfailed . "<br/>";
// if failed rollback database entries
$this->db->transactionRollback();
}
}
誰かが同様の問題を抱えていましたか?ちなみにPHP/5.3.3-7を使っています。