проблемы с PHP и библиотекой ADODB и сервером SQL - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть функция PHP с использованием библиотеки ADODB. Мой запрос прост, выберите отдельный SessID из таблицы.

Когда я выполняю итерацию, я получаю следующую ошибку: Примечание: неопределенный индекс: SessID в C: \ Program Files \ xampp \ htdocs \ conference \ AbstractSearchDAO.php в строке 116

Вот код:

открытая функция searchAbstracts ($ name, $ title) {

    /**,$dayArray,$sessionTypeArray, $abstractTypeArray,$groupBy*/

    $sql_abstract_session_ids = "select distinct SessID from ABSTRACT where ";
    if($name!=null && $title!=null){
        $sql_abstract_session_ids .= "FALastName like "."'%".$name."%' or AbstractTitle like "."'%".$title."%'";    
    }elseif($name!=null && $title==null){
        $sql_abstract_session_ids .= "FALastName like "."'%".$name."%'";
    }elseif($name==null && $title!=null){
        $sql_abstract_session_ids .= "AbstractTitle like "."'%".$title."%'";
    }elseif($name==null && $title==null){
        $sql_abstract_session_ids = "select distinct SessID from ABSTRACT";
    }

    $connect = new ATSDataSourceLocator();
    $conn = $connect->connectConference2011();

    echo $sql_abstract_session_ids;


    //////////////////////////////////////////////////////////
    //let's get the session ids from the abstract table.
    //we can then match them with another search on the session table (where SessID in (...abstract_session_ids....)
    $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
    $rs = $conn->Execute($sql_abstract_session_ids);
    if($rs==false) die('failed');



    $sql_session_data = "select * from SESSION where SessID in (";

    $count = $rs->RecordCount();

    $myCount = 0;





    while(!$rs->EOF){

        $sql_session_data.="'".$rs->fields['SessID']."'";

        if($myCount<($count-1)){
            $sql_session_data.=",";
        }

        $myCount++;

        $rs->MoveNext();

    }

    $sql_session_data.=")";
    //$conn->Close();

    echo $sql_session_data;

}

Всякий раз, когда я пытаюсь выполнить итерацию и получить поле 'SessID', происходит сбой. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Пробовали ли вы $ rs-> fields ('SessID') в своей итерации - то есть заменить квадратные скобки на круглые? Или, например, оставить квадратные скобки и использовать $ rs-> fields [0] (если это первое поле)?

С MySQL это не проблема, но будет выдавать ошибку, если вы используете раунд вместо квадрата с индексом поля, в отличие от имени. У меня нет базы данных SQL Server, с которой можно было бы тестировать.

Что-то в моей голове говорит, что это поведение также может меняться в зависимости от настроек ADODB_FETCH. По крайней мере, это действительно зависит от драйвера:

"Если режим выборки не предопределен, режим выборки по умолчанию равен ADODB_FETCH_DEFAULT. Поведение этого режима по умолчанию варьируется от драйвера к драйверу, поэтому не полагайтесь на ADODB_FETCH_DEFAULT. Для переносимости мы рекомендуем придерживаться ADODB_FETCH_NUM или ADODB_FETCH_ASSOC. Многие драйверы. не поддерживает ADODB_FETCH_BOTH. "

0 голосов
/ 20 декабря 2011

Проверьте, как определяется ADODB_ASSOC_CASE, и сравните это значение с руководством ADODB . Если вы не устанавливаете его явно, его значение по умолчанию должно быть 2, что означает, что ваша прописная буква в вашем скрипте должна точно соответствовать заглавной букве в таблице. Также обратите внимание, что это должно быть define 'd , прежде чем вы включите adodb.inc.php. И наконец, дважды и трижды проверьте, что поле определенно SessID в вашей таблице ABSTRACT.

...