2015-05-03 2 views
1

Мне нужно вставить строку в базу данных с использованием PDO. Но он не работает, и он не печатает никаких ошибок, поэтому я не знаю, где проблема.PHP не отображает ошибку PDO, даже если я устанавливаю обработку ошибок

Соединение в порядке, потому что я могу запускать запросы UPDATE.

Но на этом запросе он застревает без печати любой ошибки:

$dbtype  = "mysql"; 
$dbhost  = "xxx"; 
$dbname  = "xxx"; 
$dbuser  = "xxx"; 
$dbpass  = "xxx"; 

$db = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = "INSERT INTO users (id, name) VALUES (:id,:name)"; 
$q = $db->prepare($sql); 

$q->execute(array(
    ':id'=>$id, 
    ':name'=>$name 
)); 

есть ли другой способ отладки, кроме этой команды?

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

положить print_r ($ conn-> errorInfo()); после выполнения и получить то, что является ошибкой? –

+0

Это всегда пусто: Array ([0] => 00000 [1] => [2] =>) – JackDavis

+0

Заменить: id -> id и: name -> name without:. – vanadium23

ответ

1

Возможно, вы error reporting выключен и вы не пытаетесь поймать исключение, если ваш код генерирует один.

Таким образом, вы должны поместить свой код в блок try and catch, например.

try { 
    //your stuff 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

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

+0

Спасибо, это возвращает ошибку. Но странно, что '$ db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);' не работает. Я включил все предупреждения и уведомления: 'error_reporting (E_ALL); ini_set ('display_errors', 1); ' Хорошо, я буду использовать это для отладки, спасибо. :) – JackDavis

+0

@JackDavis. Тогда это, вероятно, не фатальная ошибка, и она не отображает сообщения об ошибках только из исключения исключения. – Rizier123

0

У меня была такая же проблема, как и не видеть сообщений об ошибках из mysql. После исследования выяснилось, что проблема не имеет ничего общего с самим PHP, но с конфигурацией сервера mysql. Значение по умолчанию переменной lc_messages_dir указывает на несуществующий каталог. После добавления строки в mysqld.cnf перезагрузите сервер mysql, и, наконец, он сработает. Для меня было следующее право один:

lc_messages_dir=/usr/share/mysql

Он описан в справочной тузд руководстве: https://dev.mysql.com/doc/refman/5.7/en/error-message-language.html

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