За последние 24 часа нас посетили 63187 программистов и 1737 роботов. Сейчас ищут 850 программистов ...

Возврат массива запроса

Тема в разделе "PHP и базы данных", создана пользователем ExDragon, 30 мар 2011.

  1. ExDragon

    ExDragon Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    76
    Симпатии:
    0
    мне нужно вернуть массив значений полученных из БД
    Код (Text):
    1. class Test
    2. {
    3.     function SELECT_CHAR_SESS_ID(){
    4.         $cont = mysql_connect($GLOBALS["db_ip"], $GLOBALS["db_user"], $GLOBALS["db_pw"]);
    5.         mysql_select_db($GLOBALS["c_db"], $cont);
    6.         mysql_query("SET NAMES '".$GLOBALS['encode']."'");
    7.         $query = mysql_query('SELECT * FROM `characters` WHERE `account` = "'.$_SESSION['user_id'].'"');
    8.         $row = mysql_fetch_assoc($query);
    9.         return $row;
    10.     }
    11. }
    Код (Text):
    1.     while ($userchar = $query->SELECT_CHAR_SESS_ID()){
    2.         System::getFlag($userchar['race']);
    3.         System::getRace($userchar['race'], $userchar['gender']);
    4.         System::getClass($userchar['class']);
    5.     }
    Должно получится 2 раза.. а получается бесконечно =( как решить данную проблему?
     
  2. centnerik

    centnerik Активный пользователь

    С нами с:
    11 мар 2011
    Сообщения:
    32
    Симпатии:
    0
    PHP:
    1.  
    2. $row = $query->SELECT_CHAR_SESS_ID();
    3. foreach($row as $val){
    4.       System::getFlag($val['race']);
    5.       System::getRace($val['race'], $userchar['gender']);
    6.       System::getClass($val['class']);
    7. }
    8.  
    Кажется должно получиться
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Расскажи что делает метод SELECT_CHAR_SESS_ID() ?
     
  4. ExDragon

    ExDragon Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    76
    Симпатии:
    0
    Volt(220), ну SELECT_CHAR_SESS_ID() по идеи должен вернуть ассоциированный массив всех чаров данного юера.
     
  5. ExDragon

    ExDragon Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    76
    Симпатии:
    0
    centnerik, нет данные неточно отображаются =(
     
  6. ExDragon

    ExDragon Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    76
    Симпатии:
    0
    Код (Text):
    1.         $this->ConnectChar();
    2.         $query = mysql_query('SELECT * FROM `characters` WHERE `account` = "'.$_SESSION['user_id'].'"');
    3.  
    4.     while ($userchar= mysql_fetch_assoc($query)){
    5.         echo '<tr bgcolor="FF8040">';
    6.         echo '<td width = "130"><center><b>Имя</b></center></td>';
    7.         echo '<td><center><b>Инфа</b></center></td>';
    8.         echo '<td width = "75"><center><b>Уровень</b></center></td>';
    9.         echo '<td><center><b>Деньги</b></center></td>';
    10.         echo '</tr><tr><td>';
    11.         echo '<center><a href = "http://'.$_SERVER['HTTP_HOST'].'/'.$armory_dir.'/?player='.$userchar['guid'].'" target = "_blank">'.$userchar['name'].'</a></center>';
    12.         echo "</td><td>";
    13.         $sys->getFlag($userchar['race']);
    14.         $sys->getRace($userchar['race'], $userchar['gender']);
    15.         $sys->getClass($userchar['class']);
    16.         echo "</td><td><center><h4>".$userchar['level']."</h4></center></td><td>";
    17.         $sys->getMoney($userchar['money']);
    18.         echo "</td></tr>";
    19.         }
    если сделать так то всё норм.. но мне так ненужно!
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    ExDragon
    1) Я не спрашивал что он "по идее должен вернуть" я спрашивал что он делает.
    2) Где в нем идет взятие из базы всех чаров?
     
  8. ExDragon

    ExDragon Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    76
    Симпатии:
    0
    Volt(220)
    Не совсем понял вопрос О_0, этот метод конектится к базе, собирает инфу о чаре по id юзера...
    [sql]SELECT * FROM `characters` WHERE `account` = "'.$_SESSION['user_id'].'"[/sql]
    вот он берёт всю инфу о чаре принадлежащие $_SESSION['user_id']
    их может быть несколько,
    например структура базы (mangos)
    +-characters-------+
    -guid
    -name
    -account
    -race-
    -class
    -и остальные
    пример:
    100, Name, 51, 5, 3
    101, Name2, 51, 4, 5
    102, Name3, 51, 8, 2
    Мне нужно отобразить их в таблице
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Метод:
    PHP:
    1. <?php
    2. function SELECT_CHAR_SESS_ID(){
    3.       $cont = mysql_connect($GLOBALS["db_ip"], $GLOBALS["db_user"], $GLOBALS["db_pw"]);
    4.       mysql_select_db($GLOBALS["c_db"], $cont);
    5.       mysql_query("SET NAMES '".$GLOBALS['encode']."'");
    6.       $query = mysql_query('SELECT * FROM `characters` WHERE `account` = "'.$_SESSION['user_id'].'"');
    7.       $row = mysql_fetch_assoc($query);
    8.       return $row;
    9.    }
    1)Коннектится к серверу БД.
    2)Выбирает БД.
    3)Устанавливает кодировку.
    4)Посылает запрос
    5)Берет первую строчку из запроса
    6)Возвращает эту строчку.

    Вот что делает метод.
    А теперь ответь на второй вопрос: "Где в нем идет взятие из базы всех чаров?"
     
  10. ExDragon

    ExDragon Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    76
    Симпатии:
    0
    Именно! а как же так сделать тогда?
    потому и while бесконечный..
    следователь так нельзя =( надо продумать ООП =)
    подскажите как вернуть всех чаров в запросе
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Изменить метод так чтобы он возвращал нужный массив. Или возвращать из метода ресурс и затем его фетчить в цикле.
     
  12. ExDragon

    ExDragon Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    76
    Симпатии:
    0
    а как? что за массив или что за ресурс?
    PHP:
    1.     function ConnectChar()
    2.     {
    3.         $cont = mysql_connect($GLOBALS["db_ip"], $GLOBALS["db_user"], $GLOBALS["db_pw"]);
    4.         mysql_select_db($GLOBALS["c_db"], $cont);
    5.         mysql_query("SET NAMES '".$GLOBALS['encode']."'");
    6.         return $cont;
    7.     }
    8.     function Close($conn)
    9.     {
    10.         mysql_close($conn);
    11.     }
    12.     function getDB($getdb)
    13.     {
    14.         switch ($getdb){
    15.         case 'characters':
    16.         case 'char':
    17.             return 'characters';
    18.         break;
    19.         case 'acc':
    20.         case 'account':
    21.             return 'account';
    22.         break;
    23.         }
    24.     }
    25.     function SELECT($n, $f, $w){
    26.         $this->ConnectChar();
    27.         $query = mysql_query('SELECT '.mysql_escape_string($n).' FROM `'.$this->getDB(mysql_escape_string($f)).'` WHERE '.mysql_escape_string($w).'');
    28.         $this->Close($this->ConnectChar());
    29.         return $query;
    30.     }
    как насчёт этого? это безопасно?
    как "фетчить" цикл?
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)не надо подключаться и отключаться перед/после каждого запроса.
    В начале программы подключились в конце отключились.
    2)Что значит как? Вот же ж.
    Код (Text):
    1. while ($userchar= mysql_fetch_assoc($query)){
    3)Массив с чарами.
    4)Ресурс связанный с результатами запроса. Или вопрос в том что такое "ресурс"?
    5)Зачем mysql_escape_string($f) при передачи парметра в $this->getDB()?
    getDB() не возвращает значения по умолчанию.
    6)Не ""фетчить" цикл", а "фетчить в цикле".