Intereting Posts
Как манипулировать и проверять строку, содержащую условия, которые будут оцениваться php PHP с использованием регулярного выражения для синтаксического анализа строки запроса Как использовать опцию подписчика? PHP PDOException: "SQLSTATE : недопустимый номер параметра" Перенос переменных между страницами PHP проверять одинаковые строки в цикле while и помещать их в отдельную таблицу Ошибка imagemagick convert.exe Как выполнить цикл запроса mysql с помощью php proc_open: расширение номеров дескрипторов файлов для включения «статуса» обратной связи из сценария Perl Можно ли использовать базы данных SQLite с PHP без функций sqlite? Добавить дату до имени файла перед копированием в php Каков наилучший способ привязки значений десятичных / двойных / плавающих значений с PDO в PHP? PDO bindParam для даты не работает twig template engine, используя статическую функцию или переменную API разрешения Paypal. GetBasicPersonalData в php

Могут ли методы PDO сбой и не бросать PDOException?

Я настраиваю класс устаревшей базы данных, написанный для PHP / 5.2, который был разработан для подключения к MySQL и скрыть все ошибки. Я настроил экземпляр PDO для исключения исключений:

new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)) 

Теперь мне нужно настроить свой код соответственно, чтобы обрабатывать случай, когда функции могут генерировать исключение, где бы они не были раньше, поэтому я направляюсь к руководству.

В некоторых случаях руководство является явным, например PDO::prepare :

Если сервер базы данных успешно подготовит оператор, PDO::prepare() возвращает объект PDOStatement . Если сервер базы данных не может успешно подготовить оператор, PDO::prepare() возвращает FALSE или испускает PDOException (в зависимости от обработки ошибок) .

В других случаях это расплывчато, например PDO::commit :

Возвращает TRUE при успешном FALSE или FALSE при сбое.
PDOException если нет активной транзакции.

(Может ли он выйти по другой причине и просто вернуть false ?)

И бывают случаи, когда исключения даже не упоминаются, например PDO::bindValue :

Возвращает TRUE при успешном FALSE или FALSE при сбое.

… хотя ясно, что он действительно бросает PDOException при ошибке (по крайней мере, при определенных ошибках).

Должен ли я по-прежнему проверять возвращаемое значение методов, возвращающих false при ошибке, если в руководстве не указано иное?

Нет, когда вы устанавливаете PDO::ERRMODE_EXCEPTION , всегда будут исключения для любых ошибок

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

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

Когда я создал свою систему баз данных, я использую в себе и то, и другое, если я вижу ошибку, я сам бросаю ее. Например, $pdo->prepare('') очень $pdo->prepare('') но будет ошибкой при привязке.

Тогда есть другие функции, такие как fetch которая не является ошибкой, если в базе данных нет результатов, а не проверять результаты, которые были бы глупыми.

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

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

Попробуй это

  try { $db = new PDO("mysql:host=localhost;dbname=dbname", "username", "password"); }catch( PDOException $Exception ) { $Exception->getMessage( ) ; }