Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
在sql数据库php中输入重复值时尝试捕捉数据库上的警告_Php_Postgresql - Fatal编程技术网

在sql数据库php中输入重复值时尝试捕捉数据库上的警告

在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行

我试图在一个php Web应用程序中捕获此错误,该应用程序从用户处捕获输入数据。我在mypgadmin、sourcecode列约束上使用php和sql:“
约束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行”上或附近出现语法错误