所以这两天我一直在为此拔头发。到目前为止,我已经确定了问题:
我正在使用活动记录将一些简单的数据插入数据库:
if($this->db->insert('table', $data)){
return true;
}
else{
return false;
}
问题是无论是否插入数据,它总是返回 true。我是如何弄清楚这一点的,经过几次失败的尝试,当数据最终入时,AUTO_INCREMENT ID 为 17,这意味着插入查询正在运行但无法插入,因此始终返回 true。我想知道一种可靠的方法来了解数据是否入。试:
$this->db->affected_rows() > 0;
也。但同样的问题也普遍存在。它返回 true。
如果您的表中有自动增量 id,请检查$this->db->insert_id()
如果大于零或美国数字,那么我们可以说插入的数据或
再次触发一个带有我们得到的 ID 的 SQL 查询,如果记录存在,则插入数据
但我认为没有必要只是检查insert_id
您需要先插入数据,然后再获取结果。您将需要执行以下操作:
$this->db->insert('my_table', $my_data);
$is_inserted = $this->db->affected_rows() > 0;
if($is_inserted) {
echo 'Yay! Its works!';
} else {
echo 'Something went wrong. No insert ):'
}
必须先执行插入查询,然后才能获得结果。因此,您需要运行插入,然后获取受影响的行。Codeigniter 提供了帮助我们非常轻松地做到这一点的类$this->db
。您甚至可以让插入的 id 运行$this->db->insert_id()
而不是$this->db->affected_rows()
来获取全新的插入 id。
您可能会发现这些链接很有用:
查询帮助程序函数 -https://ellislab.com/codeigniter/user-guide/database/helpers.html
活动记录类https://ellislab.com/codeigniter/user-guide/database/active_record.html
祝你好运!
>我总是这样做检查数据是否插入
$this->db->insert('table', $data);
$id = $this->db->insert_id();
if($id)
{
echo "data inserted";
}
else
{
echo "data not inserted";
}
你也可以这样做也为我工作
$query = $this->db->insert('table', $data);
if($query)
{
echo "data inserted";
}
else
{
echo "data not inserted";
}
这就是我所做的。它对我有用。
$this->db->set($data)->insert($table_name);
if ($this->db->affected_rows()) {
return $this->db->insert_id(); // or return true; in your case
}
return false;