1

我目前正在编写这样的控制器方法:

public function delete($user_id) {
    if ($this->input->server('REQUEST_METHOD')=='POST') {
        $result = $this->Crm_user_model->update($user_id,
                                                array('deleted'=>true));
        if($result) {
            add_flash_message('info', 'deleted');
        } else {
            add_flash_message('alert', 'can not delete');
        }
        //redirect('user/view');
    }
} 

但是所有结果都没有返回,即使数据库(mssql)被更改。如何知道更新查询是否成功?

4

2 回答 2

0

crm_user_model->update(),返回truefalse取决于 CodeIgniterupdate()函数的输出:

if ($this->db->update('mytable', $mydata)) {
    // Do some stuff
    return true;
} else {
    // Do some stuff
    return false;
}

或者,如果您不需要在模型中执行任何其他操作,只需执行以下操作:

return $this->db->update('mytable', $mydata);

于 2013-03-22T11:54:08.343 回答
0

我有一个担忧和一些建议。

  1. 控制器:您不应该通过 url将$user_id值传递给您的控制器。delete(例如site/ci/delete/99)每当您将数据“写入”到数据库/服务器时,您应该只$_POST用于将数据传输到服务器端。

    public function softDeleteUser(): void
    {
        $userId = $this->input->post('user_id');
        if (!$userId) {
            add_flash_message('alert', 'Required data not supplied');
        } elseif (!$this->Crm_user_model->update($userId, ['deleted' => true])) {
            add_flash_message('alert', 'Failed to soft delete user');
        } else {
            add_flash_message('info', 'Soft deleted user');
        }
    }
    

    如果没有user_idPOST'ed,那么$userId将被声明为null.

    如果您的数据库模式不能存储布尔值 ( true),那么通常使用10作为布尔等效项。

    在构建条件块时,我更喜欢在成功的结果之前写所有负面/错误/不成功的结果。

    建议在允许软删除用户之前进行用户身份验证/授权检查,以便只有特权用户有权执行此操作。

  2. 模型:您的查询应该仅在模型中完成。因为查询可能没有语法错误,但也没有对数据库进行任何更改,所以您必须在两点检查过程。

    考虑以下情况:

    1. 传递给控制器​​的$userId那个在数据库中不存在,或者
    2. 包含 的行$userId已经“软删除”。

    在这两种情况下,查询都不会失败,但不会有受影响的行。这些是您的脚本与实际更改更新区分开来的相关事件。

    public function update(int $userId, array $newData): int
    {
        // ensure that no one can ever modify the user_id column value
        unset($newData['user_id']);
    
        if ($this->db->update('user_tablename', $newData, ['user_id' => $userId])) {
            $affectedRows = $this->db->affected_rows();
            if ($affectedRows) {
                // potentially log successful change if your system keeps track of change history
                // $this->Log->userChange($userId, $newData);
            }
            return $affectedRows;
        }
        return 0;
    }
    

    如果有语法错误,它将出现在您的错误日志中。

于 2020-11-19T23:41:21.807 回答