这是我的模型中的代码:
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。为什么?以及如何测试它以确保它有效?因为我没有错误或警告。
答案 0 :(得分:0)
如果$ x为null,这不是什么大问题,因为ConnectionInterface :: beginTransaction()方法应该返回Connection本身($ this),它被称为fluent interface。
事实是并非所有驱动程序都能正确实现它。例如,在Mysqli和Pgsql中,该方法没有返回。
我不确定在这里使用事务是否相关...你有一个插入,所以如果失败则不需要回滚任何内容?
当您希望多个数据库更改为原子时,事务很有用(其中一个更改中的任何错误都将回滚整个更改)。