Обработка ошибок для PDO :: ATTR_EMULATE_PREPARES => false - PullRequest
1 голос
/ 04 января 2012

Мои коды:

$st = $conn->prepare('abc');
echo "emulate is : " . $st->getAttribute(PDO::ATTR_EMULATE_PREPARES) . "<br />";

$sql = "SELECT count(*) FROM traceuser WHERE username=? ORDER BY gg DESC";
$q = $conn->prepare($sql);
$result = $q->execute(array("zac1987"));
$number_of_rows = $q->fetchColumn();
if($result){ 
    echo "sql query successful";
}else{ 
    echo "sql query fail. ";
    print_r ($q->errorInfo()) ;
}


Вывод, если PDO::ATTR_EMULATE_PREPARES => true:
подражать это: 1
SQL-запрос не выполнен. Array ([0] => 00000 [1] => 1054 [2] => Неизвестный столбец «gg» в «предложении заказа»)


Вывод, если PDO::ATTR_EMULATE_PREPARES => false:
Неустранимая ошибка: вызов функции-члена getAttribute () для необъекта в /home/aekcom/public_html/test-countResult-fakePS.php в строке 33

Неустранимая ошибка: вызов функции-члена execute () для необъекта в /home/aekcom/public_html/test-countResult-fakePS.php в строке 41

Вопрос:
Почему getAttribute () не работает, если PDO::ATTR_EMULATE_PREPARES => false? Как проверить значение эмуляции? Или как сделать так, чтобы "emulate is: 0"?

Как сделать так, чтобы PDO::ATTR_EMULATE_PREPARES => false показывал более подробную информацию об ошибке, например " Неизвестный столбец 'gg' " вместо " function execute () для необъекта "?

1 Ответ

1 голос
/ 07 января 2013

В строке:

$conn->prepare('abc');

У вас (очень плохая) синтаксическая ошибка в SQL "abc". С эмуляцией нет проверки ошибок при подготовке, и вы терпите неудачу при выполнении. Без эмуляции вы не сможете подготовиться, а $ st будет нулевым, ложным или чем-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...