我如何处理Codeigniter"数据库错误"在PHP中无法插入新行?

时间:2017-10-24 12:15:23

标签: php database codeigniter insert

我使用codeigniter框架为mysql数据库实现CRUD服务器。以下函数在" alarmstate"中插入一个新行。数据库中的表。报警状态有三个参数:

(id,tag,description)

public function save($alarmstate){

    $this->db->set($this->_setalarmstate($alarmstate))->insert('alarmstate');

    if ($this->db->affected_rows() === 1){
        return $this->db->insert_id();
    }else{
        return -1;
    }

}

标签必须是唯一的,因此,当我尝试使用现有标签插入新的警报状态时,数据库不应允许这种情况发生。

问题是,当尝试插入一个已存在标记的新行时,该函数将被中止,客户端将获得一个完整的html文件:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Database Error</title>
        <style type="text/css">
        ....

我希望CRUD服务器返回&#34; -1&#34;如果出现这样的错误,但我无法阻止服务器返回所述html页面。我试过使用&#34; try / catch&#34;结构体。我也试过使用准备好的陈述,但是我得到一个错误,说&#34; prepare()&#34;不是mysqli驱动程序中定义的方法。

我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以直接检查返回的变量,如下所示。

    $result = $this->db->set($this->_setalarmstate($alarmstate))->insert('alarmstate');
    if($result){
        return $this->db->insert_id();
    }else{
        return -1;
    }

答案 1 :(得分:0)

您可以通过更改application/config/database.php

中的设置来实际抑制错误输出到屏幕

$db['default']['db_debug'] = FALSE;

然后通过以下方式处理错误:

if ( ! $this->db->simple_query('SELECT `example_field` FROM `example_table`'))
{
    $error = $this->db->error(); // Has keys 'code' and 'message'
}

`