Мое заявление PDO не работает

Это мой PHP sql-оператор, и он возвращает false, а var dumping

$password_md5 = md5($_GET['password']); $sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)'); $result = $sql->execute(array( ':fullname' => $_GET['fullname'], ':email' => $_GET['email'], ':username' => $_GET['username'], ':password' => $password_md5, ':password_plain' => $_GET['password'])); 

Solutions Collecting From Web of "Мое заявление PDO не работает"

Если инструкция PDO возвращает FALSE , это означает, что запрос завершился неудачно. Вы должны установить PDO в правильном режиме отчетности об ошибках, чтобы знать об ошибке.

Поместите эту строку в свой код сразу после подключения

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

Получив сообщение об ошибке, вы должны прочитать и понять его. Это звучит слишком очевидно, но учащиеся часто упускают из виду чрезвычайную полезность сообщения об ошибке. Однако большую часть времени это объясняет проблему довольно просто. Скажем, если в нем указано, что конкретная таблица не существует, вы должны проверить орфографию, опечатки, регистр букв, учетные данные и т. Д. Или, если он говорит, что в синтаксисе SQL есть ошибка, вам нужно изучить ваш SQL. И проблема находится прямо перед частью запроса, указанной в messaage ошибки.

Вы также должны доверять сообщению об ошибке. Если он говорит, что количество токенов не совпадает с числом связанных переменных, то это так. То же самое касается отсутствующих таблиц или столбцов. Учитывая выбор, независимо от того, является ли ваша собственная ошибка или сообщение об ошибке неправильным, всегда придерживайтесь первого. Снова это звучит снисходительно, но сотни вопросов на этом сайте доказывают, что это советует очень полезно.


Обратите внимание, что для того, чтобы увидеть ошибки PDO, вы должны уметь видеть ошибки PHP вообще. Для этого вам нужно настроить PHP, зависит от среды сайта:

  • на сервере разработки очень удобно иметь ошибки прямо на экране, для которых необходимо включить отображение ошибок:

     error_reporting(E_ALL); ini_set('display_errors',1); 
  • в то время как на реальном сайте все ошибки должны регистрироваться, но никогда не показываться клиенту. Для этого настройте PHP таким образом:

     error_reporting(E_ALL); ini_set('display_errors', 0); ini_set('log_errors', 1); 

Обратите внимание, что error_reporting должен быть установлен на E_ALL все время.

Также обратите внимание на то, что, несмотря на общее заблуждение, для отчета об ошибках не нужно использовать попытку . PHP сообщит вам об ошибках PDO уже и в лучшем виде. Неоткрытое исключение очень полезно для разработки, но если вы хотите показать страницу с настраиваемой ошибкой, по-прежнему не используйте try catch для этого, а просто установите собственный обработчик ошибок . Вкратце, вам не нужно рассматривать ошибки PDO как нечто особенное, но рассматривать их как любую другую ошибку в вашем коде.