2015-09-02 3 views
2

Я пытаюсь поймать эту ошибку в php webapp, которая захватывает входные данные от пользователя. им с помощью PHP и SQL на mypgadmin, ограничении столбцов исходного кода: «CONSTRAINT sourcecodes_sourcecode_key UNIQUE (sourcecode)»Попытка поймать предупреждение по базе данных при вводе повторяющихся значений в sql-базе данных php

ОШИБКА

Warning: pg_execute() [function.pg-execute]: Query failed: ERROR: duplicate key value violates unique constraint "sourcecodes_sourcecode_key" DETAIL: Key (sourcecode)=(Source3) already exists. in D:\xampp\htdocs ...php on line 289

Проблема, когда пользователь вводит существующий исходный код, то генерируется ошибка на проводку значения.

Код

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

Попробуйте изменить запрос добавив «ON дубликатом ключа», чтобы поймать ошибку на уровне БД, проверить: https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Примечание: Вы можете подделать обновление по ...UPDATE c=c;, например

Ex: '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; 
+0

в какой момент это будет дисплей ошибка? это неправильно –

+0

@ Luthando Loot: Значит, вы говорите, что это неправильно? –

+0

Почему он должен поймать исключение, которое может быть разрешено головными болями? –

Смежные вопросы