我的问题太奇怪了。 我试图在mysql表中插入一行(使用InnoDB)。没有错误。一切都很好。但该行未添加到表中。
更新:
将表格引擎从 InnoDB 更改为 MyISAM 将解决问题,但为什么InnoDB无法正常工作?
这是我的代码,它总是返回true:
$this->db->trans_start();
$this->db->set('userId', '27193');
$this->db->set('listId', '14');
$this->db->set('createDate', '2017-02-23');
$this->db->set('alertReq', '1');
$this->db->insert('parking');
if ($this->db->affected_rows() == '1') {
$this->db->trans_complete();
return true;
} else {
$this->db->trans_complete();
return false;
}
我也尝试了不同的插入查询:
$parkings = array (
'userId' => '27193',
'listId' => '14',
'createDate' => '2017-02-23',
'alertReq' => '1'
);
$this->db->trans_start();
$this->db->insert('parking', $parkings);
if ($this->db->affected_rows() == '1') {
$this->db->trans_complete();
return true;
} else {
$this->db->trans_complete();
return false;
}
OR
$sql = "INSERT INTO `parking` (`userId`, `listId`, `createDate`, `alertReq`) VALUES ('27193', '14', '2017-02-23', '1')";
$query = $this->db->query($sql);
使用时
$this->output->enable_profiler(TRUE);
在我的控制器中,所有上述查询都会生成并显示:
INSERT INTO `parking` (`userId`, `listId`, `createDate`, `alertReq`) VALUES ('27193', '14', '2017-02-23', '1')
in profiler&即使在停车表中,id列也会自动递增1。 但是表格中没有添加新行!!!
当我使用phpmyadmin或adminer插入该行时,它们按预期工作,我可以看到添加了新行。但是对于CI,我没有成功!
这是我的表结构:
CREATE TABLE `parking` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId` int(11) NOT NULL,
`listId` int(11) NOT NULL,
`createDate` date NOT NULL,
`alertReq` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
我尝试删除 parking 表并重新创建它,但没有成功。 我还尝试创建另一个具有相同结构和不同名称的表(比如 parkingsss ),再次没有成功。
答案 0 :(得分:0)
尝试转换为https://codeigniter.com/userguide3/database/transactions.html#running-transactions-manually
使用一个db set(),如下面的代码行
$this->db->trans_begin();
$data = array(
'userId' => '27193',
'listId' => '14',
'createDate' => '2017-02-23',
'alertReq' => '1'
);
$this->db->set($data);
$query = $this->db->insert('parking');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
} else {
$this->db->trans_commit();
}
return $query; // Returns only true or false;