За последние 24 часа нас посетили 17795 программистов и 1665 роботов. Сейчас ищут 852 программиста ...

Снова вопросы, теперь про объекты в целом и PDO в частности

Тема в разделе "PHP для новичков", создана пользователем Ega23, 9 апр 2008.

  1. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Вот я выполняю некий select :
    Код (Text):
    1.  
    2. $dbh = new PDO($cs[0], $cs[1], $cs[2]);
    3. $sql = "select top 1 ID from testtable";
    4. echo $sql.'<BR>';
    5. $row = $dbh->query($sql);
    Вот как мне теперь узнать, вернулась пустая выборка, или с данными?
    Неужели каждый раз select count(*) делать? Это же двойная работа...
     
  2. creage

    creage Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    131
    Симпатии:
    0
    Адрес:
    Киев
    эээ... а если проверить размер $row?
     
  3. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    А как? Count? Щас попробую...
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. if ($row = $dbh->query($sql)) {
    2.     // чё-то вернуло
    3. }
     
  5. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    э-э-э... Тогда я вообще ничего не понимаю.
    из мануала:
    Return Values
    PDO->query() returns a PDOStatement object.

    Кстати действительно объявлена как bool Но как bool может быть объектом???
     
  6. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Стоп. Выборка-то мне возвращается, это видно (столбцы и всё-такое). Только рекодсет - пустой.
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ступил. Можно так попробовать
    PHP:
    1. <?php
    2. if ($rows = $dbh->query($sql)->fetchAll()) {
    3.     foreach ($rows as $row) {
    4.         // ... работаем с записью
    5.     }
    6. }
    или так
    PHP:
    1. <?php
    2. $res = $dbh->query($sql);
    3. if ($res->rowCount()) {
    4.     // ...
    5. }
     
  8. creage

    creage Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    131
    Симпатии:
    0
    Адрес:
    Киев
    блин, вот что мне на этом форуме не нравится - не дают думать. совсем. взяли и написали весь код. также люди ничему, кроме копи/паста, не научатся! подскажите идею - пусть сами реализовывают!
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А какая там идея-то? Стандартный метод PDOStatement? :)
     
  10. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Ты не переживай, я прежде чем написать и мануал почитал, и код раз 40 переписывал.

    Оба варианта пробовал.
    Сначала второй: в мануале сказано, что rowCount() - это только для Insert/Update/Delete. Для Select - не действует. Оговорка - можно сначала дёрнуть select count(*) from ... where ..., убедитьсяЮ что он не ноль, и только после этого уже фетчить значение. Этот вариант мне не нравится, т.к., фактически, в два прохода надо идти.

    Первый вариант.
    Ой, не заметил fetchAll. Сейчас попробую, как ты написал, но fetchAll() тоже пробовал, что-то не пошло (может неправильно использовал)?
     
  11. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Это сработало, спасибо.
    Наверное где-то накосячил, когда эксперементировал.