2012-06-15 2 views
3

Этот код работает нормально, но я хочу обработать , если что-то пойдет не так, поэтому я сознательно сделал синтаксическую ошибку в query, но ничего не происходит. Ниже приведен кодКак повысить PDOException?

try { 
    $sql = "INSERT INTO journals (topic, author,) VALUES ('$topic', '$authors', ')"; 
    echo "1st"; 
    $lecturers_db->query($sql); 
    echo "second"; 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
    echo $msg = "Error!"; 
} 

без очевидной ошибки синтаксиса, код работает нормально, но с синтаксической ошибкой, ничего не происходит, весь код в try block и выполняет код в catch block никогда не выполняет.

Я хочу поднять exception, пожалуйста, как это сделать, спасибо за любую помощь.

ответ

7

Обязательно установите атрибут PDO :: ATTR_ERRMODE к PDO :: ERRMODE_EXCEPTION, как только вы инициализировать Ваш PDO объект:

$lecturers_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

После этого сбойный запросы сгенерирует исключение

+1

+1 Вы также можете передать это как четвертый аргумент конструктору: 'array (PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION)' (наряду с возможными другими параметрами конфигурации). –

+0

Вау, спасибо большое, теперь я получаю сообщения об ошибках. – Chibuzo

+1

@Chibuzo Рад помочь :) Если это было полезно, не забудьте отметить его как ответ, Cheers! – marcelog

5

Исключения выбрасываются. Синтаксические ошибки в коде! = Исключения.

<?php 
    try { 
     $code = 12; 
     throw new PDOException('Message', $code); 
    } catch (PDOException $e) { 

    } 
?> 

Однако из maual:

Вы не должны бросить PDOException из своего собственного кода. См. Исключения для получения дополнительной информации об исключениях в PHP.

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

+0

Большое спасибо за ввод, я следую вашей ссылке. – Chibuzo

+0

Вы неправильно поняли вопрос OP. Он говорил о синтаксических ошибках в операторах SQL. Мне потребовалось второе чтение, чтобы понять это. –

+0

@fireeyedboy Да, я заметил, что после того, как я прочитал ответ Марселога. спасибо за указание –

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