В соответствии с просьбой я переформатирую вопрос:
Для следующего кода:
$newPDO=new PDO($DSN,$USER,$PASS); $newPDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $SQL='SOME SQL STATEMENT MAYBE FAULTY'; try{ $Query=$newPDO->Prepare($SQL) $Success=$Query->execute(); if(!$Success) echo('A'); } catch(PDOException $e) { echo('B'); }
Вопрос в том, можно ли напечатать «А»? Будет ли ответ отличаться для разных типов $SQL
например select или insert?
Оригинальный вопрос:
Попробуй это:
try { //Initial query processing $execute = $query->execute() if (!$execute) { //catch the exception throw new Exception ("blah") } } catch (Exception $e) { //Exception logic here }
Напишите ваши запросы, подобные этому, и если они столкнутся с исключением в разделе try
, он перейдет в раздел catch
и вы сможете обрабатывать его, как вам нравится (независимо от того, зависит ли ID от определенного случая).
Если исключений нет, он никогда не достигнет оператора catch
, и ваш запрос будет просто выполнен.
Когда дело доходит до DUPLICATES -> вам нужно обойти это в SQL. Например, ваш запрос может быть:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
Я видел, что execute () возвращает false, не бросая исключение, которое, на мой взгляд, является неожиданным / плохим. Это означает, что мы в основном должны делать одновременно – обработку ошибок и исключений параллельно.
В моем случае: если я подготовил запрос вставки без каких-либо параметров, а затем выполнил с параметром. Execute не генерирует исключение, а возвращает false. Я предлагаю любому использовать решение @ mlishn.