php adodb сделать красиво

Discussion in 'PHP' started by barnaki, 18 Mar 2011.

  1. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    вообщем вопрос такой. надо в проэкт добавить adodb. это такая библиотека на php которая поддерживает все популярные базы данных. раньше я как делал. в контролере подключал класс sql запросов. и отсылыл их модели. модель мне делала
    PHP:
    $result mysql_query($query) or die ("Error in query: $query. ".mysql_error());
                  return 
    $result;
    и этот $result я снова уже в контролере обрабатывал. выбирал значения из $row и т.д.
    а adodb работает так
    PHP:
    // выполняем какой нить запрос где $query это sql запрос
    $execute_query $db->Execute("$query");
    //получаем ответ
    $result =  $execute_query->GetRows(); 
    и каждый раз надо делать
    PHP:
    foreach($result as $k => $row) {
            echo 
    "r1=".$row[0]." r2=".$row[1]."<br>";
    $result->MoveNext();
        } 
    (MoveNext ) это метод для перехода на следующую строку в результате $result. чисто adodb фича

    и этот ответ мне надо передать в класс контролера.
    вопрос как с ним с контролере работать елси он получен из местного класса $db. как сделать красиво чтобы в контролере можно быть как и раньше простым
    while (($postrow[] = mysql_fetch_array($result) обработать. если кто себе представляет прошу от души напишите для примера пару строчек.
    как мне классу контролера объяснить что надо делать какой то там movenext ?
     
    #1 barnaki, 18 Mar 2011
    Last edited: 18 Mar 2011
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    barnaki Как то не понимаю, зачем вы делаете foreach, если как вы говорите для получения следующей строки - надо вызывать специальный метод? В документации написано:
    PHP:
     $rs =& $rs->Execute($sql);
    while (!
    $rs->EOF) {
        
    var_dump($rs->fields);
        
    $rs->MoveNext();
     
    _________________________
  3. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    ну while я буду использовать . не суть для меня. мне интересно как контролеру объяснить что надо какой то там movenext использовать и где он его возьмет если сам result пришел из модели.
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    barnaki я не вижу проблемы как-то. В первом коде - $result это ресурс, который обрабатывается с помощью mysql_fetch_*. Во втором коде - это уже объект класса, т.е. вместо mysql_fetch_* вы будете вызывать его методы, или я не прав?
     
    _________________________
  5. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    тоесть если я передам объект то и в другом классе (которому передам ) смогу использовать его методы ?
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    barnaki вопрос, конечно, как передадите - но да, почему бы и не могли? Это же обычная переменная, хоть и с "продвинутыми" свойствами
     
    _________________________
    1 person likes this.
  7. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    2 Gifts
    блин не получается :( . я в модели делаю так
    PHP:
    $db->SetFetchMode(ADODB_FETCH_ASSOC);
           
    $result $db->Execute($query);
          return 
    $result;
    а в контролере так
    PHP:
    print_r($books_total->fields);
    но оно выводит
    Trying to get property of non-object .
    а как передать чтобы работали методы передоваемого объекта ?
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    barnaki если сделать этот вывод в модели - выводится нормально?
    PHP:
     $db->SetFetchMode(ADODB_FETCH_ASSOC);
           
    $result $db->Execute($query);
    var_dump($result);
    var_dump($result->fields);
          return 
    $result;  
    Попробуйте возвращать указатель, а не сам результат:
    PHP:
    $db->SetFetchMode(ADODB_FETCH_ASSOC);
           
    $result = &$db->Execute($query);
          return 
    $result;
    Вы уверены, что $books_total - это тот же $result что и в модели, и никак не обрабатывается? Выведите тип переменной и в модели и в контроллере:
    PHP:
    var_dump($books_total);
     
    print_r($books_total->fields);  
    Наконец, попытайтесь если возможно сделать минимально рабочий пример с неисправностью, который можно запустить и проверить. Например в таком виде у меня все работает:
    PHP:
    include('adodb5/adodb.inc.php');
    function 
    ololo()
    {
        
    $DB NewADOConnection('mysql');
        list(
    $server$user$pwd$db) = array('localhost''root''''achat');
        
    $DB->Connect($server$user$pwd$db);

        
    $rs $DB->Execute("select * from config");
        return 
    $rs;
    }

    $rs ololo();

    var_dump($rs->fields);
    while (
    $array $rs->FetchRow()) {
        
    print_r($array);
    }
     
    _________________________
    #8 Gifts, 21 Mar 2011
    Last edited: 21 Mar 2011
  9. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    блин а у меня не работает :( . вот мой код.
    PHP:
    public function db_query($query){
           
            
    $db = &ADONewConnection('mysql');
         
    $db->Connect($GLOBALS["server"], $GLOBALS["user"],$GLOBALS["password"], $GLOBALS["database"]);
         
    $db->SetFetchMode(ADODB_FETCH_ASSOC);
            echo 
    "<br>";
            
    var_dump($db);
            echo 
    "<br>";
            echo 
    "$query";
            echo 
    "<br>";
           
    $result = &$db->Execute("$query");
            echo 
    "<br>";
            
    print_r($result->fields);
            echo 
    "<br>";
          
    var_dump($result);
        }
    var_dump ($query) нормально выводит запрос.
    var_dump ($db ) тоже выводит что все нормально.
    а вот потом result выводит bool false а $result->fields выводит Trying to get property of non-object :( . может быть вы увидете ошибку в моем коде ?
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    barnaki ошибка в запросе. Попробуйте так:
    PHP:
            echo "$query";
            echo 
    "<br>";
           
    $result = &$db->Execute("$query");
            echo 
    "<br>"
    if (!
    $resultvar_dump($db->ErrorMsg());
    И покажите запрос
     
    _________________________