Помогите понять.Есть такой код ? <?php class DataBaseInfo { public $result=0; function db_OpenConnection() //коннектимся к базе { $link = mysql_connect("localhost", "root") or die("Could not connect: " . mysql_error()); print ("Connected successfully </br>"); return $link; } function db_SelectDB ($link) //выбираем базу { $db = mysql_select_db("class",$link) or die ('Can\'t use subject : ' . mysql_error()); print ("Database is selected successfully</br>"); mysql_query('SET NAMES "utf8"'); mysql_query("SET collation_connection='utf8_general_ci'"); mysql_query("SET collation_server='utf8_general_ci'"); mysql_query("SET character_set_client='utf8'"); mysql_query("SET character_set_connection='utf8'"); mysql_query("SET character_set_results='utf8'"); mysql_query("SET character_set_server='utf8'"); } function db_Query($StringQuery) // выполнение запроса { $link=self::db_OpenConnection(); self::db_SelectDB ($link); $this->result= mysql_query($StringQuery) or die("Invalid query: " . mysql_error()); print ("Query is successfully</br>"); } function db_Show() //показ что сохранено в свойстве класса { while ($row = mysql_fetch_array($this->result, MYSQL_NUM)) { print_r($row); echo "</br>"; } } function db_GetAllRows() // помещение резултата в массив { $a=array(); while ($row = mysql_fetch_array($this->result, MYSQL_NUM)) { $a[]=$row; } echo "<pre>"; print_r($a); echo "</pre>"; } function db_Count() { $num_rows = mysql_num_rows($this->result); echo $num_rows; } } function Main () { $l=new DataBaseInfo (); $StringQuery="SELECT * FROM subject"; $l->db_Query($StringQuery); $l->db_GetAllRows(); $l->db_Count(); $l->db_GetAllRows(); $l->db_Count(); } Main (); ?> Объясните пожалуйста почему вызов метода db_GetAllRows() второй раз возвращает пустой массив. Спасибо. У меня вот такой результат Connected successfully Database is selected successfully Query is successfully Array ( [0] => Array ( [0] => 1 [1] => Математика [2] => Погорелов [3] => 2009-07-27 [4] => Офигенный учебник по математике ) [1] => Array ( [0] => 2 [1] => История [2] => Кульчицкий [3] => 2009-07-08 [4] => Фиговый учебник по истории ) [2] => Array ( [0] => 3 [1] => Русский язык и литература [2] => Иванов [3] => 2006-07-04 [4] => Хорошая книжка по русскому языку ) [3] => Array ( [0] => 4 [1] => Биология [2] => Живчиков [3] => 2004-01-03 [4] => Неплохая книжка о мухах ) [4] => Array ( [0] => 5 [1] => Физика [2] => Ньютонов [3] => 2008-07-10 [4] => Книга о последствиях падений яблок ) [5] => Array ( [0] => 6 [1] => Химия [2] => Склодовская-Кюрьева [3] => 2005-11-11 [4] => Книга о защите от радиации ) ) 6 Array ПОЧЕМУ ЗДЕСЬ ПУСТО??? ( ) 6 СПАСИБО ЗА ПОМОЩЬ!
neverlose, спасибо большое. Работает. Только вот все равно понять не могу, я же один раз вызвал $l->db_Query($StringQuery) и сохранил указатель на результат запроса в свойстве класса $this->result= mysql_query($StringQuery) Дальше другими методами класса я хочу просто обрабатывать возвращенный результат. Поэтому я передаю указатель на резултьтат запроса хранящийся в свойстве класса result этим методам. В методе db_GetAllRows() это выглядит так while ($row = mysql_fetch_array($this->result, MYSQL_NUM)) и тд . Затем в методе Мain я создаю экземпляр класса и вызываю метод $l->db_Query($StringQuery). Я так понимаю после этого свойство результ уже содержит указатель на даные и я могу его использовать сколько угодно передавая его в другие методы и вызывая их. Так почему я должен каждый раз выполнять db_Query($StringQuery)? Как загнать раз и навсегда указатель на возвращенные данные и обрабатывать их разными методами, не выполняя каждый раз обращение к базе? Подскажите пожалуйста. Спасибо.
Используйте (копируйте всегда) копию указателя, вместо ссылки на него После чтения указателя, его позиция всегда увеличивается на 1, пока не дойдёт до конца. После этого, указатель на начало не переходит.