我有一个将行插入表格的函数,如下所示
function fn_insert_user() {
$this->db->trans_begin();
$this->db->query('INSERT INTO user VALUES(9,"john", "9865321245")');
$this->db->query('INSERT INTO user VALUES(8,"martin", "8865321245")');
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
echo 'something bad happened';
}
else
{
$this->db->trans_commit();
echo 'everything is fine';
}
}
现在主键8已经存在,因此预期它不应该允许插入第二个查询(这很好)。
它成功回滚了第一个查询,但问题是打印
而不是打印“发生了一些不好的事情”A Database Error Occurred
Error Number: 1062
Duplicate entry '8' for key 'PRIMARY'
INSERT INTO user VALUES(8,"martin", "8865321245")
Filename: C:\wamp\www\landmark\system\database\DB_driver.php
Line Number: 330
答案 0 :(得分:3)
如果你这样做
$this->db->trans_complete();
并且
$this->db->trans_commit();
然后它将提交两次交易。
你有2个解决方案:
$this->db->trans_start();
$this->db->query('QUERY');
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE)
{
echo "fail";
}
OR
$this->db->trans_begin();
$this->db->query('QUERY...');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
}
else
{
$this->db->trans_commit();
}
有关详细信息,请参阅文档; http://www.codeigniter.com/user_guide/database/transactions.html
答案 1 :(得分:0)
这不是转换问题......
试一试:
function fn_insert_user() {
$this->db->trans_begin();
$this->db->query('INSERT INTO user VALUES("john", "9865321245")');
$this->db->query('INSERT INTO user VALUES("martin", "8865321245")');
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
echo 'something bad happened';
}
else
{
$this->db->trans_commit();
echo 'everything is fine';
}
}