Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: как правильно обработать ошибку запроса в PDO?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: как правильно обработать ошибку запроса в PDO?
3d_killer
Отправлено: 25 Ноября, 2012 - 10:45:04
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Подскажите есть такой запрос:
PHP:
скопировать код в буфер обмена
  1.         $STH=$DBH->query("SELECT *  from db_config WHERE name='admin_email'");
  2.         $STH->setFetchmode(PDO::FETCH_ASSOC);
  3.         while ($row=$STH->fetch())
  4.         {
  5.                 echo $row['value'];    
  6.         }

как в нем сделать обработку ошибки чтобы пользователь не видел ее?
 
My status
 Top
sKaa
Отправлено: 25 Ноября, 2012 - 10:58:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Обернуть в try-catch
 
 Top
KingStar
Отправлено: 25 Ноября, 2012 - 11:14:33
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. try
  3. {
  4.  
  5.    $query = "SELECT *  from db_config WHERE name = :admin_email";
  6.    $param[':admin_email'] = "root@site.ru";
  7.  
  8.    $result = $DBH->prepare($query);
  9.    $result->execute($param);
  10.    $result = $result->fetchAll();
  11.  
  12.    foreach($result as $row)
  13.    {
  14.        echo $row['value'];
  15.    }
  16.  
  17. }
  18. catch(PDOException $error_pdo)
  19. {                      
  20.    $error = '<br />ERROR: ' . $error_pdo->getMessage();
  21.    $error .= '<br />LINE: ' . $error_pdo->getLine();
  22.    $error .= '<br />FILE: ' . $error_pdo->getFile();
  23.    exit($error);
  24. }
  25.  
  26.  

(Отредактировано автором: 25 Ноября, 2012 - 11:16:58)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
Мелкий Супермодератор
Отправлено: 25 Ноября, 2012 - 11:23:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




KingStar пишет:
$result->execute($param);
$result = $result->fetchAll();

foreach($result as $row)

И зачем это извращение? PDOStatement давно уже Traversable
PHP:
скопировать код в буфер обмена
  1.    $result->execute($param);
  2.    foreach($result as $row)


-----
PostgreSQL DBA
 
 Top
3d_killer
Отправлено: 25 Ноября, 2012 - 11:26:24
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




так не работает все равно выводит ошибку:
PHP:
скопировать код в буфер обмена
  1.   try{
  2.          $STH = $DBH->prepare("SELECT *  from db_menu WHERE url='$id'");
  3.          $STH->execute();
  4.         while($res = $STH->fetch(PDO::FETCH_ASSOC))
  5.                 {
  6.                 echo $res['name'];
  7.                 }
  8.         }
  9.         catch(PDOException $e)
  10.          {
  11.                  echo " Извините. Но операци не может быть выполнена.";  
  12.         file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);  
  13.          }
Огорчение
 
My status
 Top
sKaa
Отправлено: 25 Ноября, 2012 - 13:25:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


3d_killer, если это какая-то модель, то ошибку, логичней хранить в константе :
PHP:
скопировать код в буфер обмена
  1.  
  2. class BasicModel {
  3.    const
  4.  
  5.         OPERATION_ERROR = 'Sorry, but ... %s';
  6.  
  7.  
  8.     .......
  9.   }
  10.         catch(PDOException $e)
  11.     {
  12.      echo sprintf(self::OPERATION_ERROR , $e->getError());
  13.  
  14.  
  15. }

(Отредактировано автором: 25 Ноября, 2012 - 13:26:27)

 
 Top
3d_killer
Отправлено: 25 Ноября, 2012 - 13:28:24
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




не не модель простой запрос только ошибка выдается пользователю не ту которую я хочу...
вот пока не получилось
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB