在sql database php中输入重复值时,尝试捕获数据库警告

时间:2015-09-02 09:21:54

标签: php postgresql

我试图在一个捕获用户输入数据的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');
        }

1 个答案:

答案 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;