php запрос не получает никаких данных? - PullRequest
0 голосов
/ 03 августа 2011

Хорошо, я хочу извлечь некоторые данные из представления mysql, но кажется, что wuery ничего не извлекает (хотя представление содержит данные).

вот код, которым я был«играя» с (я использую adodb для php)

$get_teachers=$db->Execute("select  * from lecturer ");

//$array=array();
//fill array with teacher for each lesson
for($j=0;$j<$get_teachers->fetchrow();++$j){
    /*$row2 = $get_lessons->fetchrow();
   $row3=$row2[0];
    $teach=array(array());
    //array_push($teach, $row3);
    $teach[$j]=mysql_fetch_array( $get_teachers, TYPE );
    //echo $row3;*/
    $row = $get_teachers->fetchrow();
    //$name=$row[0]+" "+$row[0]+"/n";
    //array_push($teach, $row1);
    echo $row[0]; echo " ";echo $row[1]." ";
    //$db->debug = true;

}

, если я пытаюсь что-то вроде «выбрать имя, фамилию из пользователей», запрос частично работает.Под частичным я имею в виду, что хотя в базе данных 2 пользователя, цикл печатает только последнего пользователя.

исходный запрос, который я хотел выполнить, был

$get_teachers=$db->Execute("select  surname,name from users,assigned_to,lessons 
where users.UID=assigned_to.UID and lessons.LID=assigned_to.LID and
lessons.term='".$_GET['term']."'");

, но непохоже, что-то делает все, что я пробовал с представлением (когда вы выполняете это в phpmyadmin, оно работает нормально (заменяя часть GET числом от 1 до 7)

таблицы, если вам интересно: пользователи,assign_to и examples. (assign_to - таблица, соединяющая каждого пользователя с уроком, который он преподает, содержащий UID = userid и LID = lessonid). Здесь я хотел бы получить имя + фамилию пользователей, которые преподают урок.список, который показывает каждый урок +, кто преподает его, исходя из термина, который доступен урок.

Ответы [ 3 ]

3 голосов
/ 03 августа 2011

Глядя на http://adodb.sourceforge.net/ На первой странице я вижу пример использования библиотеки:

$rs = $DB->Execute("select * from table where key=123");
while ($array = $rs->FetchRow()) {
    print_r($array);
}

Итак, вы должны использовать:

while ($row = $get_teachers->fetchrow()) {

вместо:

for ($j = 0; $j < $get_teachers->fetchrow(); ++$j) {

Идея с FetchRow() состоит в том, что она возвращает следующую строку в последовательности.Он не возвращает номер последней строки, поэтому вы не должны использовать его как условие в цикле for.Вы должны вызывать его каждый раз, когда вам понадобится следующая строка в последовательности, и, если строк больше нет, она вернет false.

. Также посмотрите документацию для FetchRow().

0 голосов
/ 03 августа 2011

Поскольку вы извлекаете данные дважды сначала в цикле

for($j=0;$j<$get_teachers->fetchrow();++$j){
    ... some code ...
    // And here you fetch again
    $row = $get_teachers->fetchrow();

Вы должны использовать его следующим образом

while ($row = $get_teachers->fetchrow()) {
0 голосов
/ 03 августа 2011

for($j=0;$j<$get_teachers->fetchrow();++$j){

... несколькими строками позже ...

$row = $get_teachers->fetchrow();

Посмотрите, как вы дважды вызываете fetchrow(), прежде чем что-то печатать?Вы удаляете две строки из набора результатов для каждой 1, которую вы фактически используете.

while ($row = $get_teachers->fetchrow()) {

и не вызывайте fetchrow() снова в цикле.

...