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
Отправлено: 18 Сентября, 2013 - 10:14:37
Post Id



Участник


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


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




Столкнулся с проблемой и не пойму как решить, есть какой либо запрос на PDO
в него передаются переменные подготовленные, но я заранее не знаю существуют ли эти переменные или нет, то есть запрос не выполнится так как будет ошибка если параметра нет, как решить такой вопрос, не делать же кучу условий если переменных 10 или больше
 
My status
 Top
avtor.fox
Отправлено: 18 Сентября, 2013 - 10:21:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




3d_killer, покажите как пробовали и почему переменные пусты? Неправильная структура?
 
 Top
3d_killer
Отправлено: 18 Сентября, 2013 - 10:23:24
Post Id



Участник


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. public function __construct()
  3.         {
  4.                 global $DBH;
  5.                 $stmt = $DBH->prepare("INSERT INTO table_report_user
  6. (time, session_id, request_url, user_agent, reffer,ip)
  7. VALUES
  8. (:time,:session_id,:request_url,:user_agent,:reffer,:ip)");
  9.                 $stmt->bindParam(':time', time());
  10.                 $stmt->bindParam(':session_id', session_id());
  11.                 $stmt->bindParam(':request_url', $_SERVER['REQUEST_URI']);
  12.                 $stmt->bindParam(':user_agent', $_SERVER['HTTP_USER_AGENT']);
  13.                 $stmt->bindParam(':reffer', $_SERVER['HTTP_REFERER']);
  14.                 $stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
  15.                 $stmt->execute();
  16.         }
  17.  

(Добавление)
Этот параметр , дело в нем
(Добавление)
бывает пустым
(Добавление)
а так же как выполнять то запросы если это например фильтр, неизвестно будет ли послана минимальная максимальная цена или размеры или еще что.

(Отредактировано автором: 18 Сентября, 2013 - 10:25:18)

 
My status
 Top
avtor.fox
Отправлено: 18 Сентября, 2013 - 10:39:43
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




3d_killer, самое простое -

PHP:
скопировать код в буфер обмена
  1. isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'NULL';


Намного сложнее, но удобно и красиво - http://habrahabr[dot]ru/post/137664#habracut
 
 Top
3d_killer
Отправлено: 18 Сентября, 2013 - 10:42:18
Post Id



Участник


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


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




а как быть со вторым вопросом? "как выполнять то запросы если это например фильтр, неизвестно будет ли послана минимальная максимальная цена или размеры или еще что."
 
My status
 Top
avtor.fox
Отправлено: 18 Сентября, 2013 - 10:45:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




3d_killer, листаете хабр по приведённой ссылке до "Именные placeholder’ы" и будет Вам сщастя.
 
 Top
3d_killer
Отправлено: 18 Сентября, 2013 - 10:46:26
Post Id



Участник


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


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




Спасибо, почитаю
(Добавление)
странно, но не работает:
PHP:
скопировать код в буфер обмена
  1.  
  2. $stmt = $DBH->prepare("INSERT INTO table_report_user (time,session_id,reffer) VALUES (:time, :session_id,:reffer)");
  3.         $data['time']=time();
  4.         $data['session_id']=session_id();
  5.         $data['reffer']=$_SERVER['HTTP_REFERER'];
  6.         $stmt->execute((array)$data);
  7.  

пока reffer не добавляю работает, как добавил, все в базу не пишется
(Добавление)
моя ошибка в базе поле стояло NOT NULL, сори
 
My status
 Top
avtor.fox
Отправлено: 18 Сентября, 2013 - 11:14:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




PHP:
скопировать код в буфер обмена
  1. class PDO_Placeholder{
  2.  
  3.     public
  4.         $iTime,
  5.         $iSess,
  6.         $sReffer;
  7.  
  8.     public function __construct()
  9.     {
  10.         $this->_GetTimestamp();
  11.         $this->_GetSessionID();
  12.         $this->_GetRefferer();
  13.     }
  14.    
  15.     private function _GetTimestamp()
  16.     {
  17.         $this->iTime = time();
  18.     }
  19.    
  20.     private function _GetSessionID()
  21.     {
  22.         $this->iSess = session_id();
  23.     }
  24.    
  25.     private function _GetRefferer()
  26.     {
  27.         $this->sReffer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'NULL';
  28.     }
  29.  
  30. }
  31.  
  32. $STH = $DBH->prepare("
  33.    INSERT INTO
  34.        table_report_user
  35.            (time,session_id,reffer)
  36.        VALUES
  37.            (:iTime, :iSess,:sReffer)
  38. ");
  39.  
  40. $stmt->execute(
  41.     (array) new PDO_Placeholder
  42. );


Осознаете всю прелесть данного приёма? Улыбка

(Отредактировано автором: 18 Сентября, 2013 - 11:15:22)

 
 Top
3d_killer
Отправлено: 18 Сентября, 2013 - 11:36:14
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