我使用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驱动程序中定义的方法。
我怎么能解决这个问题?
答案 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'
}
`