在sql数据库php中输入重复值时尝试捕捉数据库上的警告
我试图在一个php Web应用程序中捕获此错误,该应用程序从用户处捕获输入数据。我在mypgadmin、sourcecode列约束上使用php和sql:“在sql数据库php中输入重复值时尝试捕捉数据库上的警告,php,postgresql,Php,Postgresql,我试图在一个php Web应用程序中捕获此错误,该应用程序从用户处捕获输入数据。我在mypgadmin、sourcecode列约束上使用php和sql:“约束sourcecode\u sourcecode\u键唯一(sourcecode)” 错误 警告:pg_execute()[function.pg execute]:查询失败:错误:重复的键值违反唯一约束“sourcecodes\u sourcecode\u key”详细信息:键(sourcecode)=(Source3)已存在。在第289行
约束sourcecode\u sourcecode\u键唯一(sourcecode)
”
错误
警告:pg_execute()[function.pg execute]:查询失败:错误:重复的键值违反唯一约束“sourcecodes\u sourcecode\u key”详细信息:键(sourcecode)=(Source3)已存在。在第289行的D:\xampp\htdocs…php中
问题当用户输入现有源代码时,在发布值时会生成错误
代码
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');
}
尝试通过添加“ON DUPLICATE KEY”来更改查询以捕获数据库级别的错误,请签出: 注: 您可以通过
…update c=c来伪造更新代码>例如
例如:“在重复密钥更新id=$1时插入config.sourcecode(id,sourcecode)值($1,$2)。
”
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;
为什么他要抓住一个可以通过头痛来解决的例外?如果他的方法不是很好,并且一个有不同方法但解决了全局的答案是无效的,那么这并不能回答OP的问题?另外,您的也不一样:)我得到了这个错误:“警告:pg_prepare()[function.pg prepare]:查询失败:错误:在我的插入中添加此“ON DUPLICATEKEY更新源代码=$3”时,在“第1行”上或附近出现语法错误