За последние 24 часа нас посетил 18091 программист и 1599 роботов. Сейчас ищут 917 программистов ...

Проверка запросов в PDO

Тема в разделе "Прочие вопросы по PHP", создана пользователем Oleg_php, 16 фев 2012.

  1. Oleg_php

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

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    Как лучше проверить PDO запрос. Например:

    $sql = "SELECT * FROM table WHERE id='".$_GET['id']."'";
    $stmt = $dbh->query($sql);
    // Вывод
    while($row = $stmt->fetch(PDO::FETCH_OBJ))
    {
    echo $row->text;
    }
    например если отправили id не существующую как сделать редирект на 1 запись?

    Заранее спасибо!
     
  2. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    На вскидку
    Код (Text):
    1.  
    2. SELECT * FROM table WHERE (NOT EXISTS (SELECT id from table as t WHERE t.id = '".$_GET['id']."')) OR (id = '".$_GET['id']."') LIMIT 1;
    Оптимизируйте сами, либо ищите иной вариант..
     
  3. Oleg_php

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

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    Спасибо. А проверить как в обычном mysql запросе на if (!sql) и просто человека перенаправить на главную. страницу, в pdo каким образом можно сделать?
     
  4. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Я чет не пойму, сформулируйте общий вопрос темы корректно.
    Вам нужно чтобы мускуль вам отдал запись или тупо при отсутствии онной сделать редирект на другую страницу?
     
  5. Oleg_php

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

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    С выдачей 1 записи я разобрался, на Вашем примере.

    Сейчас просблема стоит, как сделать редирект при отсутствии записи.
     
  6. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Если это разные задачи:
    и
    Код (PHP):
    1. if($stmt->fetch(PDO::FETCH_ASSOC))
    2. {
    3. есть
    4. }
    5. else 
    6. {
    7.  нет
    8. }
    9.  
     
  7. Oleg_php

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

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    Спасибо за помощь у условии, а вывод через foreach лучше сделать?

    if($stmt->fetch(PDO::FETCH_OBJ))
    {
    // Вывод

    }
    else
    {
    // редирект
    }

    Добавлено спустя 5 минут 15 секунд:
    С выводм теперь проблема.

    if($stmt->fetch(PDO::FETCH_OBJ))
    {
    // Вывод
    foreach ($stmt as $row)
    {
    echo $row->content;
    }
    }
    else
    {
    // редирект
    }

    ничего не выводит.
     
  8. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Это условие было примитивным для наглядности и понимания, в вашем первом посте замените while на if и у вас будет доступ к записям через $row.
    По условию sql запроса могу предположить, что у вас всего-лишь получен ОДИН row и поэтому while и foreach здесь просто не нужны.
     
  9. Oleg_php

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

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    Всё разобрался. Спасибо.
     
  10. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (PHP):
    1. if($row = $stmt->fetch(PDO::FETCH_OBJ))
    2. { 
    3. echo $row->title; 
    4. } 
    5. else
    6. {
    7. echo "Запись не правильная";
    8. // или редирект.. смотря что нужно
    9. }
    10.  
    11.  
     
  11. Oleg_php

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

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    Вот так и сделал. Спасибо.