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 :: Замыкание в PHP, жесткий мозгошторм

 PHP.SU

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


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

> Без описания
jora_xrenov
Отправлено: 16 Сентября, 2013 - 17:34:29
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Сент. 2013  


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




Помогите докумекать

Есть вот такой вот код (часть класса)
PHP:
скопировать код в буфер обмена
  1.  
  2.     protected $q;
  3.  
  4.     public function query($query) {
  5.         $this->q=$this->db->query($query);
  6.         return $this->q;
  7.     }
  8.  
  9.     public function fetch_object() {
  10.         if(!is_object($this->q)) {
  11.             return false;
  12.         }
  13.         return $this->q->fetchObject();
  14.     }


Вот так используется и все работает нормально


PHP:
скопировать код в буфер обмена
  1. if($this->db->query("SELECT * FROM `blog`;") {
  2.     while($row = $this->db->fetch_object()) {
  3.        
  4.     }
  5. }


Но если сделать вложенность, то ничего работать не будет

PHP:
скопировать код в буфер обмена
  1. if($this->db->query("SELECT * FROM `blog`;") {
  2.     while($row = $this->db->fetch_object()) {
  3.         if($this->db->query("SELECT * FROM `comment`;") {
  4.             while($row_x = $this->db->fetch_object()) {
  5.                
  6.             }
  7.         }
  8.     }
  9. }


Все дело в $this->db->q в которой сохраняется ссылка на обьект

В общем нужно как то применив замыкание сделать $this->q для каждого вызова функции query свою


Отредактировано модератором: OrmaJever, 16 Сентября, 2013 - 18:50:35
 
 Top
caballero
Отправлено: 16 Сентября, 2013 - 18:09:50
Post Id


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


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


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




потому что ты перезатираешь выборку первого запроса
и при чем тут замыкание


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
alexxorlovv
Отправлено: 16 Сентября, 2013 - 23:12:03
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Сент. 2013  
Откуда: Москва


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




Попробуй такое решение(давно как то с пьяну набросал для себя Радость )Для простых запросов в самый раз.
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. class Sql
  3. {
  4.         private $_db;
  5.  
  6.         function __construct($db)
  7.         {
  8.                 $this->_db = $db;
  9.        
  10.         }
  11.        
  12.         private function keyParse($array)
  13.         {
  14.                 return implode(', ',array_keys($array));
  15.         }
  16.         private function valueParse($array)
  17.         {
  18.                 return implode(', ',array_values($array));
  19.         }
  20.        
  21.         private function valueQuote($array)
  22.         {
  23.        
  24.                 foreach($array as $k => $v)
  25.                         $array[$k] = $this->_db->quote($v);
  26.                 return $array;
  27.         }
  28.        
  29.         private function keyValueParse($array)
  30.         {
  31.                 foreach($array as $k => $v){
  32.                         $keyValue .= $k." = ".$v.", ";}
  33.                 return substr($keyValue,0,strlen($keyValue) - 2);      
  34.         }
  35.        
  36.          
  37.         public function insert($table,$params)
  38.         {
  39.                 $params = $this->valueQuote($params);
  40.                 $keys = $this->keyParse($params);
  41.                 $values = $this->valueParse($params);
  42.                 $sql = "INSERT INTO `{$table}` ({$keys}) VALUES({$values})";
  43.                 $insert = $this->_db->exec($sql);
  44.                 return $insert;
  45.        
  46.         }
  47.        
  48.         public function update($table,$params,$where = '')
  49.         {
  50.                 $params = $this->valueQuote($params);
  51.                 $params = $this->keyValueParse($params);
  52.                 $sql = "UPDATE {$table} SET {$params} WHERE {$where}";
  53.                 $update = $this->_db->exec($sql);
  54.                 if($update) return true;
  55.                 else return false;
  56.         }
  57.        
  58.         public function delete($table,$where)
  59.         {
  60.                 $sql = "DELETE FROM {$table} WHERE {$where}";
  61.                
  62.                 $delete = $this->_db->exec($sql);
  63.                 return $delete;
  64.         }
  65.        
  66.        
  67.        
  68.         public function select($table,$selection,$where = "",$type = null,$fetch="fetch")
  69.         {
  70.                 switch($type)
  71.                 {
  72.                 case "num": $pdo = PDO::FETCH_NUM;break;
  73.                 case "assoc": $pdo = PDO::FETCH_ASSOC;break;
  74.                 case "obj": $pdo = PDO::FETCH_OBJ;break;
  75.                 default: $pdo = PDO::FETCH_OBJ;
  76.                 }
  77.                 if($where != "") $where = "WHERE {$where}";
  78.                
  79.                         $sql = "SELECT {$selection} FROM {$table} {$where}";
  80.                
  81.                         $stmt = $this->_db->query($sql);
  82.                         $select = $stmt->$fetch($pdo);
  83.                         return $select;
  84.         }              
  85. }
  86. ?>

Хотелось бы подчеркнуть. Юзается PDO object

(Отредактировано автором: 16 Сентября, 2013 - 23:20:31)

 
 Top
esterio
Отправлено: 16 Сентября, 2013 - 23:37:07
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




ничего хорошео в етом коде нет
 
 Top
alexxorlovv
Отправлено: 16 Сентября, 2013 - 23:57:32
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Сент. 2013  
Откуда: Москва


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




Не буду отрицать, писал давно, но это решение неплохо упрощало работу с PDO
 
 Top
Stierus Супермодератор
Отправлено: 17 Сентября, 2013 - 09:24:06
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. if($result = $this->db->query("SELECT * FROM `blog`;") {
  3.     while($row = $result->fetch_object()) {
  4.         if($this->db->query("SELECT * FROM `comment`;") {
  5.             while($row_x = $this->db->fetch_object()) {
  6.                
  7.             }
  8.         }
  9.     }
  10. }
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB