PHP останавливается при выполнении PDO()

#php #mysql #pdo

#php #mysql #pdo

Вопрос:

Я использую WAMP в качестве своей платформы. Запускаем следующий код (pdodb — это фреймворк для работы с PDO):

 <?PHP
    $mysql = pdodb::getInstance();
    $query = "  SELECT PhysicalID FROM PhysicalInfo 
                WHERE barcode=0";
    $mysql->Prepare($query);
    $res = $mysql->Execute($query);
?>
  

PHP останавливается при «Execute()», например, следующие строки не выполняются! Я использовал try/catch для catch (Exception e) , но даже сообщение об ошибке в catch не отображается! излишне говорить, что нет смысла вставлять $res->errorInfo() после execute() , потому что он тоже не будет запущен. Хотя, если я установлю базу данных в своем коде:

 $query = "  SELECT PhysicalID FROM **carinfo.**PhysicalInfo 
            WHERE barcode=0";
  

Код выполняется идеально. Используя phpMyAdmin, я получаю следующую ошибку при первом запросе:

 #1046 - No database selected 
  

Проблема в том:

  1. Почему PHP останавливается на этом, а остальная часть программы после $mysql->Execute($query); не запускается.
  2. Как я мог бы получить сообщение об ошибке, чтобы проверить его наличие в моей программе (довольно некрасиво, когда ваш код останавливается без какого-либо предупреждения).

Комментарии:

1. Остановка выполнения PHP происходит из-за неустранимой ошибки. Убедитесь, что у вас есть сообщение об ошибках, включенное и отображаемое на экране, всегда при разработке кода. error_reporting(E_ALL); ini_set('display_errors', 1);

2. По умолчанию PDO выдает ошибки без предупреждения. Убедитесь, что ваш объект PDO, возвращаемый pdodb::getInstance() , настроен на выдачу исключений, иначе ваш try/catch ничего не сделает. $mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

3. О, я вижу проблему — вы не должны переходить $query в PDO::execute() . это ваша строка SQL, которую вы подготовили. Единственными параметрами для execute() был бы массив связанных параметров (у вас нет ни одного из них в этом операторе). Поскольку у вас нет пользовательского ввода, вы можете безопасно просто вызвать $res = $mysql->query($query); вместо этого, чтобы избежать накладных расходов prepare()/execute() .

4. @Michael Berkowski: Спасибо, Майкл, $mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); дает мне Call to undefined method pdodb::setAttribute() . Я думаю, это может быть потому, что pdodb пропускает некоторые функции PDO?

5. @Michael Berkowski: Я использовал $mysql->Execute($query); раньше, и это работает просто отлично. А также нет query() функции для экземпляра pdodb 🙁