我试图在一个捕获用户输入数据的php webapp中捕获此错误。我在mypgadmin上使用php和sql,源代码列约束:" CONSTRAINT sourcecodes_sourcecode_key UNIQUE (sourcecode)
"
错误
警告:pg_execute()[function.pg-execute]:查询失败:错误:重复键值违反唯一约束" sourcecodes_sourcecode_key"详细信息:密钥(源代码)=(Source3)已存在。在D:\ xampp \ htdocs ... php on line 289
用户输入现有源代码时出现问题,然后在POSTING该值时生成错误。
代码
if(array_key_exists("btnsubmit", $_POST)) {
$pk_check = "true";
if($pk_check == "true") {
$parameters = array();
$parameters[] = $counter;
$parameters[] = $_POST['source'];
$sql_string = "INSERT INTO config.sourcecodes (id,sourcecode ) VALUES ($1,$2 )";
try {
$saved = $db_cfg->Execute($sql_string, "", $parameters);
if($saved) {
$feedback = 'New Campaign: ' . $_POST['campaign_id'] . ' Saved successfully';
} else {
error_reporting(32);
$feedback = "_Error Saving Source Code ! _";
//echo pg_last_notice($sql_string) ;
// throw new $exception('Error saving new source code');
}
}
catch(\sdException $exception) {
throw new Exception('fatal err trycatch nt wrkn');
}
答案 0 :(得分:0)
尝试更改您的查询,添加“ON DUPLICATE KEY”以捕获数据库级别的错误,请查看:https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
注意:
您可以通过...UPDATE c=c;
伪造更新,例如
例如:'INSERT INTO config.sourcecodes (id,sourcecode ) VALUES ($1,$2 ) ON DUPLICATE KEY UPDATE id = $1
'
PostgreSQL 9.5:
INSERT INTO config.sourcecodes (id,sourcecode ) VALUES ($1,$2 )
ON CONFLICT (sourcecode) DO UPDATE SET id = id;
或者通过捕获例外:
BEGIN
INSERT INTO config.sourcecodes (id,sourcecode ) VALUES ($1,$2 );
EXCEPTION
WHEN unique_violation THEN
UPDATE config.sourcecodes SET sourcecode = sourcecode WHERE id = $1;
END;