0
這是我的代碼從我的模型:你如何在Zend 2中的代碼中處理數據庫事務?
namespace Application\Model;
use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
class UsersTable extends AbstractTableGateway {
public function __construct(Adapter $adapter) {
$this->adapter = $adapter;
}
public function fetchAll() {
$results = $this->adapter->query("SELECT * FROM users");
$results = $results->execute();
return $results->current();
}
public function insertNewUser($new_user_data){
$ip = $_SERVER['REMOTE_ADDR'];
try {
$x = $this->adapter->getDriver()->getConnection()->beginTransaction();
var_dump($x);
$insert = $this->adapter->query("INSERT INTO users (username,`name`,email,`password`, birthday,country,city,address,website,img_url,`date`,`update`,ip,email_confirm,`status`) values ('".$new_user_data['username']."','".$new_user_data['name']."','".$new_user_data['mail']."','".md5($new_user_data['password'])."','".$new_user_data['birthday']."','".$new_user_data['country']."','".$new_user_data['city']."','".$new_user_data['address']."','".$new_user_data['website']."','".$new_user_data['user_picture']."',NOW(),
NOW(),'".$ip."','0','normal')");
$insert->execute();
$x = $this->adapter->getDriver()->getConnection()->commit();
} catch (Exception $e) {
$this->adapter->getDriver()->getConnection()->rollback();
echo "Failed: " . $e->getMessage();
}
}
}
插入查詢它工作正常,並執行它。但var_dump($ x)的結果是null。爲什麼?我如何測試它以確保它能正常工作?因爲我沒有錯誤或警告。
其實它會比較複雜,但是對於開始我只寫了一個簡單的查詢。但是,如果我修改查詢以便崩潰,它將不會進入catch部分。爲什麼?我猜代碼是錯誤的。我在誤解什麼? thx –
我在這裏採取一個瘋狂的猜測,並假定在該方法內不會引發異常,因此您將永遠不會遇到您的catch條件。爲了在轉換失敗時拋出異常,你將不得不擴展行爲並自己添加。在這一點上,我沒有看到你爲什麼想要這樣做,你可以對此表示讚賞嗎? – cptnk
也許你可以複製你的插入,以便第二次插入引發重複的條目異常...當然,用戶表中的一列應該是唯一的(電子郵件?)。 – goten4