Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 存储过程insert语句具有重复主键或未成功时显示错误消息_Php_Mysql_Codeigniter_Stored Procedures_Error Handling - Fatal编程技术网

Php 存储过程insert语句具有重复主键或未成功时显示错误消息

Php 存储过程insert语句具有重复主键或未成功时显示错误消息,php,mysql,codeigniter,stored-procedures,error-handling,Php,Mysql,Codeigniter,Stored Procedures,Error Handling,我正在使用一个在表中插入数据的存储过程。 现在,如果我插入的数据具有表中已经存在的主键值,那么它应该会提供一个错误,但当前它会将我带到这个页面 A Database Error Occurred Error Number: 0 call spInsertabc('primary_key_value_which_already_exists','edd') Filename: models/abc_model.php Line Number: 46 如果存在类似的主键值或插入数据时出错

我正在使用一个在表中插入数据的存储过程。 现在,如果我插入的数据具有表中已经存在的主键值,那么它应该会提供一个错误,但当前它会将我带到这个页面

A Database Error Occurred

Error Number: 0

call spInsertabc('primary_key_value_which_already_exists','edd')

Filename: models/abc_model.php

Line Number: 46 
如果存在类似的主键值或插入数据时出错,我希望向用户返回一条正确的消息(例如“现在无法插入重试”或“主键已存在”),以及用户提交daa的页面

我怎样才能做到这一点


我正在使用codeigniter 2.1.0

您试图在已经有主键的表上使用ALTER TABLE命令的ADD PRIMARY KEY子句


首先删除现有的主键。

为什么不在插入主键之前先搜索它们,以确定是否可以拨打该电话?我认为最好是在开发捕捉错误的工具时,看看是否可以采取行动。srini请求的我的模型函数:公共函数insert_abc($Id,$Name){$query=$this->db->query(“call spInsertabc”(“.this->db->escape($Id)”,“$this->db->escape($Name”);返回$this->db->受影响的行($query)}Hi Patroklo:我需要了解这一点,因为我将有更复杂的插入存储过程,这将是很麻烦的,服务器将搜索主键first@Patroklo:首先查找密钥需要到数据库进行两次往返,并且需要dbms进行更多处理。无论如何,应用程序代码必须优雅地处理其他错误,因此以同样的方式处理PK错误是有意义的。没有得到以下语句“您已尝试使用ALTER TABLE命令的ADD PRIMARY KEY子句”是我调用ALTER TABLE命令的PRIMARY KEY子句的insert查询,请解释,感谢您展示您的php行号:“$this->db->escape($Id)”;“$this->db->escape($Id)”;“$this->db->escape($Id)”;”;返回$this->db->受影响的行($query);}。我的行号:46是$query=$this->db->query(“call spinsertab($Id”);返回$this->db->受影响的行($query).$this->db->escape($Id)。”,“$this->db->escape($Name)。”;