这是我一直在“玩”的代码(我正在使用adodb for 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中执行它时它工作正常(通过用1到7的数字替换GET部分)
表格,如果你想知道是:用户,assigned_to和课程。 (assigned_to是一个表,通过包含UID = userid和LID = lessonid将每个用户连接到他教授的课程)。我想在这里做的是得到教授课程的用户的姓名+姓氏。想象一个列表,显示每节课+根据课程可用的术语教授它。
答案 0 :(得分:3)
查看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()
的文档。
答案 1 :(得分:0)
for($j=0;$j<$get_teachers->fetchrow();++$j){
......几行后......
$row = $get_teachers->fetchrow();
在实际打印任何内容之前,请看两次如何调用fetchrow()
?您实际使用的每1个从结果集中删除两行。
while ($row = $get_teachers->fetchrow()) {
而不是在循环内再次调用fetchrow()
。
答案 2 :(得分:0)
因为你首先在循环中取两次
for($j=0;$j<$get_teachers->fetchrow();++$j){
... some code ...
// And here you fetch again
$row = $get_teachers->fetchrow();
你应该像这样使用它
while ($row = $get_teachers->fetchrow()) {