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
Форумы портала PHP.SU :: Версия для печати :: Вопрос по PDO
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Вопрос по PDO

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

1. 3d_killer - 18 Сентября, 2013 - 10:14:37 - перейти к сообщению
Столкнулся с проблемой и не пойму как решить, есть какой либо запрос на PDO
в него передаются переменные подготовленные, но я заранее не знаю существуют ли эти переменные или нет, то есть запрос не выполнится так как будет ошибка если параметра нет, как решить такой вопрос, не делать же кучу условий если переменных 10 или больше
2. avtor.fox - 18 Сентября, 2013 - 10:21:55 - перейти к сообщению
3d_killer, покажите как пробовали и почему переменные пусты? Неправильная структура?
3. 3d_killer - 18 Сентября, 2013 - 10:23:24 - перейти к сообщению
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.  

(Добавление)
Этот параметр
, дело в нем
(Добавление)
бывает пустым
(Добавление)
а так же как выполнять то запросы если это например фильтр, неизвестно будет ли послана минимальная максимальная цена или размеры или еще что.
4. avtor.fox - 18 Сентября, 2013 - 10:39:43 - перейти к сообщению
3d_killer, самое простое -

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


Намного сложнее, но удобно и красиво - http://habrahabr[dot]ru/post/137664#habracut
5. 3d_killer - 18 Сентября, 2013 - 10:42:18 - перейти к сообщению
а как быть со вторым вопросом? "как выполнять то запросы если это например фильтр, неизвестно будет ли послана минимальная максимальная цена или размеры или еще что."
6. avtor.fox - 18 Сентября, 2013 - 10:45:57 - перейти к сообщению
3d_killer, листаете хабр по приведённой ссылке до "Именные placeholder’ы" и будет Вам сщастя.
7. 3d_killer - 18 Сентября, 2013 - 10:46:26 - перейти к сообщению
Спасибо, почитаю
(Добавление)
странно, но не работает:
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, сори
8. avtor.fox - 18 Сентября, 2013 - 11:14:15 - перейти к сообщению
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. );


Осознаете всю прелесть данного приёма? Улыбка
9. 3d_killer - 18 Сентября, 2013 - 11:36:14 - перейти к сообщению
да, супер спасибо

 

Powered by ExBB FM 1.0 RC1