codeigniter 如何查找查询是否执行成功?

eivgtgni  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(114)

我使用codeigniter 2.0.2,这是从它的用户指南

$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );

$this->db->where('id', $id);
$this->db->update('mytable', $data);

我的问题是,一旦执行了这个,你如何发现它执行得正确与否?

7lrncoxx

7lrncoxx1#

update函数返回一个值:

$result = $this->db->update('mytable', $data);

检查该值是TRUE(成功)还是FALSE(失败)。update在内部运行query,然后返回query的返回值(Ref):
query()函数会在执行“读取”类型查询时传回一个数据库结果对象,您可以用它来显示您的结果。当执行“写入”类型查询时,它只会根据成功或失败传回TRUE或FALSE。

w41d8nur

w41d8nur2#

用途

$this->db->affected_rows()

查看写入类型查询(更新、插入等)影响了多少行
http://codeigniter.com/user_guide/database/helpers.html

vxbzzdmp

vxbzzdmp3#

两个答案都有效。您只需要根据情况使用每个答案。如果您只是检查查询是否已执行,请使用此方法:

$result = $this->db->update('mytable', $data);

如果你真的想让行数受到影响,第二种方法更好:

$this->db->affected_rows()

但是我总是使用第二种方法。更新查询就是一个很好的例子。一个查询可以成功,但数据库中仍然没有更新任何内容,因为您试图更新的值实际上等于您在查询中发送的值。
这将是一个假阳性。并且受影响的行将是0。我希望它有帮助=)

4szc88ey

4szc88ey4#

在开发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。
如果将PDO驱动程序与PostgreSQL一起使用,或者使用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;
}

在模型方法中使用一致的返回类型将使项目更易于开发和维护。调用这些模型方法的脚本将能够通过进行“错误”检查来快速评估结果。

相关问题