1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Переход с Mysql на Adodb

Тема в разделе "Web - программирование", создана пользователем buxar, 21 июл 2007.

  1. buxar

    buxar Active Member

    Репутация:
    0
    Регистрация:
    15 мар 2007
    Сообщения:
    32
    Симпатии:
    0
    Нуждаюсь в помощи
    Нужно перевести функцию с запросами в MySQL, на запросы через ADODB

    Сама функция:

    Код:
    function lastMes(){ 
    global $dbhost, $dblogin, $dbpassword, $dbname, $newsid, $fPrefics, $fURL, $lang, $newsL; 
    mysql_connect($dbhost, $dblogin, $dbpassword); 
    mysql_select_db($dbname); 
    mysql_query("set character set cp1251"); 
    
    $query_id=mysql_query('SELECT post, topic_id, post_date, pid FROM '.$fPrefics.'posts ORDER BY `post_date` DESC LIMIT 0 , 3'); 
    while($data=mysql_fetch_row($query_id)) { 
    $cN = strlen($data[0]); 
    if ($cN>$newsL){ 
    $data[0] = substr($data[0],0, $newsL); 
    $p = explode(' ', $data[0]); 
    $cN = count($p); 
    $p[$cN-1] = '...'; 
    $post[] = implode(' ', $p); 
    }else{ 
    $post[] = $data[0]; 
    } 
    $tid[]	= $data[1]; 
    $pDate[]= $data[2]; 
    $pid[]	= $data[3]; 
    } 
    
    $iMax = count($tid); 
    for($i=0; $i<$iMax; $i++){ 
    $query_id = mysql_query('SELECT forum_id, title, last_poster_name, last_poster_id FROM '.$fPrefics.'topics WHERE tid='.$tid[$i]); 
    $data=mysql_fetch_row($query_id); 
    
    echo '<b><a href="'.$fURL.'index.php?showtopic='.$tid[$i].'&view=findpost&p='.$pid[$i].'">'.$data[1].'</a></b><br>'; 
    echo $post[$i].'<br><br>'; 
    
    } 
    
    }
    Пытакля сам наковырять и вот что вышло:

    Код:
    function lastMes(){ 
    global $db, $newsid, $fPrefics, $fURL, $lang, $newsL; 
    $db->execute("SET character SET cp1251"); 
    $result = $db->execute('SELECT post, topic_id, post_date, pid FROM '.$fPrefics.'posts ORDER BY `post_date` DESC LIMIT 0 , 3'); 
    if ($result === false) die("failed");  
    while (!$result->EOF) { 
    $data = $result->FieldCount(); 
    $cN = strlen($data[0]); 
    
    if ($cN>$newsL){ 
    $data[0] = substr($data[0],0, $newsL); 
    $p = explode(' ', $data[0]); 
    $cN = count($p); 
    $p[$cN-1] = '...'; 
    $post[] = implode(' ', $p); 
    }else{ 
    $post[] = $data[0]; 
    } 
    $tid[]	= $data[1]; 
    $pDate[]= $data[2]; 
    $pid[]	= $data[3]; 
    } 
    for ($i=0, $max= count($tid); $i < $max; $i++){ 
    $result = $db->execute('SELECT forum_id, title, last_poster_name, last_poster_id FROM '.$fPrefics.'topics WHERE tid='.$tid[$i]); 
    if ($result === false) die("failed"); 
    $data= !$result->EOF; 
    echo '<b><a href="'.$fURL.'index.php?showtopic='.$tid[$i].'&view=findpost&p='.$pid[$i].'">'.$data[1].'</a></b><br>'; 
    $result->MoveNext(); 
    echo $post[$i].'<br><br>'; 
    } 
    }
    При запуске выдает:

    Код:
    Fatal error: Maximum execution time of 30 seconds exceeded in z:homebuxarnet.coscriptincludesfunctions.php on line 237
    Это строка
    Код:
    $post[] = $data[0];
    Что делать?
     
  2. MajestiC

    MajestiC Гость

    Репутация:
    0
    Есть предположение что вы забыли $result->MoveNext(); в цикле while.
     
  3. buxar

    buxar Active Member

    Репутация:
    0
    Регистрация:
    15 мар 2007
    Сообщения:
    32
    Симпатии:
    0
    Вставил после:
    Код:
    $pid[]= $data[3];
    Вроди сработало, но почему-то второй запрос к базе выдает false
     
  4. MajestiC

    MajestiC Гость

    Репутация:
    0
    Есть еще 4 предположения по коду (с ADODB последний раз просто 2 года назад работал, и то на другом языке):
    1. Возможно в вашей выборке выбирается всего 1 запись, из-за этого и false.
    2. Очень странно выглядит конструкция $data = $result->FieldCount(), она по идее не должна выдавать вам данные, и, как я думаю совсем их не выдает, а выдает кол-во полей в row-е, то есть не массив, а простое число.
    3. А уж тем более странно выглядит конструкция $data= !$result->EOF;
    4. Вот так скорее всего вам придется обращаться к полям записи: $result->fields[$i], где $i - номер поля в записи.
     
  5. buxar

    buxar Active Member

    Репутация:
    0
    Регистрация:
    15 мар 2007
    Сообщения:
    32
    Симпатии:
    0
    Спасибо, что-то я ступил
    Думал переход на ADODB - это просто замена обного запроса, а тут получается всю функцию переписывать нужно.
    Пошло $data = $result->fields; вместо $data = $result->FieldCount(), , но опять стал дальше на $cN = strlen($data[0]);

    В общем буду с нуля сам все разгребать, если что не выйдет, надеюсь на помощь.

    Спасибо (тему пока не прикрывайте)
     
  6. buxar

    buxar Active Member

    Репутация:
    0
    Регистрация:
    15 мар 2007
    Сообщения:
    32
    Симпатии:
    0
    С этим разобрался


    Теперь мой код такого вида:
    Код:
    $result = $db->SelectLimit('SELECT post, topic_id, post_date, pid FROM '.$fPrefics.'posts ORDER BY `post_date` DESC ',10);
    if ($result === false) die("failed"); 
    while (!$result->EOF) {
    $data = $result->fields;
    Возникла другая проблема, почемуто в $data не совсем то, что нужно
    Должно быть (при просмотре var_dump($data):D:
    Код:
    array(4) { [0]=> string(475) "Текст." [1]=> string(3) "420" [2]=> string(10) "1159515287" [3]=> string(4) "2764" }
    А показывает:
    Код:
    array(4) { ["post"]=> string(475) "Текст." ["topic_id"]=> string(3) "420" ["post_date"]=> string(10) "1159515287" ["pid"]=> string(4) "2764" }
    Кто подскажет в чем может быть причина?

    Может это и нужно, но как сделать?
     
  7. MajestiC

    MajestiC Гость

    Репутация:
    0
    Дело все в настройке вашей ADODB библиотеки. У вас возвращается ассоциативный массив вместо обычного. Я не знаю какую вы конкретно используете, но в ней явно должна быть настройка (или функция) которая возвращает обычный массив.

    С другой стороны, зачем обращатся к данным через $data[0], $data[1] и т.д, когда намного удобней $data['post'], $data['topic_id'], $data['post_date']
    Ведь это намного понятней, и в коде не будет возникать путаницы с индексами массива.
     
Загрузка...

Поделиться этой страницей