корявость PDO

The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.

Собственно интерес к PDO у меня проснулся из-за подготовки к ZCE, где довольно много вопросов на нем основывалось. Нет - я не то что бы совершенно с ним знаком небыл, но использовать в боевых условиях не приходилось, а вот тут как раз подвернулась возможность засунуть PDO в реальный проект, и сразу же нашлись недостатки…

Нет, возможно кому-то это и не покажется недостатками или может быть Вы уже привыкли к этим “осбенностям”, но у меня ушло некоторое время на поиск непонятного для меня бага где-то в области выборки из БД.
Доходило уже до того, что мне казалось что SQL запрос был неверным, но проверка напрямую через mysql опровергала это. Итак…
Первое и самое противное: PDO странно обрабатывает строки для IN запросов. То-есть, если мы пишем:

$sth = $this->dbh->prepare(
   "SELECT * FROM persons pi
    WHERE pi.person_id IN ( :ids )"
);
$sth->bindParam( ':ids', implode( ", ", $ids ) );


, то будте готовы, что вы не получите ожидаемый результат… да.

Второе: PDO->bindParam() в качестве второго аргумента принимает ссылку на переменную. Это чревато тем, что при попытке всучить туда константу, готовтесь увидеть нечто вроде: “Fatal error: Cannot pass parameter 2 by reference in /home/azazel/WWW/test/CLI/stext.php on line 46″

Вот так пока проходит знакомство с этим чудесным PHP Data Objects. Будет что новое - обязательно отпишусь

Tags: , , , , ,

Также рекомендую к прочтению:

3 Responses to “корявость PDO”

  1. SETo Says:

    а что вы используете вместо ПДО для доступа к БД в боевых условиях?

  2. Алексей Токарь Says:

    я использую PDO, но через обертки. Например последнее время очень нравится работать с Doctrine.

  3. standov Says:

    Эм…Вы просто не ожидаете от него его мощщщи ;)

    bindValue Вам поможет ;) bindParam гараздо более мощное ср-во - мануал прямо так и указывает ;)

    ну а с IN - эм, массив туда засунуть не пробовали?

Leave a Reply

Введите следующие символы: