我使用codeigniter 2.0.2,这是来自它的用户指南
$data = array(
'title' => $title,
'name' => $name,
'date' => $date
);
$this->db->where('id', $id);
$this->db->update('mytable', $data);
我的问题是,一旦执行,你如何发现它执行正确与否?
update
函数返回值:
$result = $this->db->update('mytable', $data);
检查TRUE
(成功)或FALSE
(失败)的值。update
内部运行query
,然后返回query
的返回值(Ref):
query()函数在运行"read"类型查询时返回一个数据库结果对象,您可以使用它来显示结果。当"写"类型的查询运行时,它只是根据成功或失败返回TRUE或FALSE。
使用
$this->db->affected_rows()
查看在写类型查询(更新、插入等)中有多少行受到影响
http://codeigniter.com/user_guide/database/helpers.html两个答案都有效。你只需要根据情况使用每一个。如果你只是检查查询是否被执行,使用这个方法:
$result = $this->db->update('mytable', $data);
如果您真的想要影响的行数,第二种方法更好:
$this->db->affected_rows()
但是我总是使用第二种方法。更新查询就是一个很好的例子。查询可以成功,但数据库上仍然没有更新任何内容,因为您尝试更新的值实际上等于您在查询中发送的值。
这将是一个假阳性。受影响的行是0。希望对你有所帮助=)
在开发CodeIgniter模型方法时,我发现根据所执行的数据库写入类型,我始终返回所需的值。区分成功运行的查询和实际更改了记录的查询通常很重要。
对于更新或删除查询,我将返回受影响的行数——这将对调用它的控制器方法最有帮助。如果你正在执行日志记录(跟踪更改历史),那么只有在行发生更改时才记录一些东西;否则,您将不必要地膨胀您的更改历史日志。
public function update(int $id, array $newData) :int
{
$oldData = $this->db->get_where('mytable', ['id' => $id])->row_array();
if ($this->db->update('mytable', $newData, ['id' => $id])) {
$affectedRows = $this->db->affected_rows();
if ($affectedRows) {
$this->Log->mytableUpdate($id, $newData, $oldData);
}
return $affectedRows;
}
return 0;
}
对于插入查询,我总是通过insert_id()
返回新插入行的自动递增的id。
如果在PostgreSQL中使用PDO驱动程序,或者使用Interbase驱动程序,这个函数需要一个$name参数,它指定了检查插入id的适当顺序。
public function insert(array $newData) :int
{
if ($this->db->insert('mytable', $newData)) {
$newId = $this->db->insert_id(); // or insert_id('mytable')
$this->Log->mytableInsert($newId, $newData);
return $newId;
}
return 0;
}
在你的模型方法中有一致的返回类型将使你的项目更容易开发和维护。调用这些模型方法的脚本将能够通过生成"false"来快速评估结果。检查。