1

这是我第一次尝试使用面向对象编程。我试图从数据库中重复时间段,但我只得到一个结果。

时隙表包含:

10:00:00  
10:15:00
10:30:00

在 PHP 类中:

 class booking {
     function __construct($mysqli) { 

     }

     function get_timeslot() {
         global $mysqli;

         $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

         while($r = $q->fetch_array(MYSQLI_ASSOC)) :
             return $r['times'];
         endwhile;

         $mysqli->close();
     }
 }

在网页中显示循环时间:

 $booking = new booking($mysqli);

 <?php echo $booking->get_timeslot(); ?>

结果:

10:00:00
4

6 回答 6

4

return 正在返回您的函数的值,因此您只会收到 1 个返回值。尝试

echo $r['times'].'<br/>';

或者

 function get_timeslot(){
     global $mysqli;

     $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
     $timeSlots = array();

     while($r = $q->fetch_array(MYSQLI_ASSOC))
     {
         $timeSlots[] = $r['times'];
     }

     $mysqli->close(); 
     return $timeSlots;
 }
于 2010-12-28T16:39:58.663 回答
1

return 语句停止 while 循环继续继续,并退出函数。您要么需要修改函数以返回一个时隙数组,要么修改您的逻辑以仅期望来自数据库的第一个结果。

于 2010-12-28T16:39:56.200 回答
1

return语句将立即退出它被调用的函数。相反,您应该将项目添加到数组而不是返回整个数组:

class booking {

 function __construct($mysqli){}

 function get_timeslot(){
  global $mysqli;
  $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

      while($r = $q->fetch_array(MYSQLI_ASSOC)) :
       $res[] = $r['times'];
      endwhile;
  $mysqli->close();
  return $res; 
 }
}
于 2010-12-28T16:43:13.337 回答
1
 function get_timeslot() {
     global $mysqli;

     $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

     while($r = $q->fetch_array(MYSQLI_ASSOC)) :
         // Cast to array
         $t[] = $r['times'];
     endwhile;

     $mysqli->close();
     // Return Array
     return $t;
 }


 // Calling the function
 $booking = new booking($mysqli);
 // Add print_r() as the return is now in an array format
 echo "<pre>".print_r($booking->get_timeslot(),true)."</pre><br />\n";
于 2010-12-28T16:45:40.083 回答
1

因为您使用的是 return $r['times']; 循环内。

这应该可以解决您的问题:

function get_timeslot(){
  global $mysqli;
  $returnArray = array();
  $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
  while($r = $q->fetch_array(MYSQLI_ASSOC)) :
       $returnArray[] = $r['times'];
  endwhile;
  $mysqli->close(); 
  return $returnArray; // now that all results are fetched from DB, return array containing them
}

另一方面,不建议在类方法或任何地方使用 global 关键字,因为全局范围使任何进程都可以访问和更改全局变量。我建议您尝试使用其他方式访问您的数据库对象(对象注册表、受保护的属性......)

同样使用 while 循环的替代语法 (while(): ... endwhile;) 不是很可读,但可以对此进行辩论。

于 2010-12-28T16:46:38.820 回答
0

试试这个:

class booking {
function __construct($mysqli){}
function get_timeslot()
{
    global $mysqli;
    $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
    $return = '';
    while ($r = $q->fetch_array(MYSQLI_ASSOC)) :
        $return.= $r['times'] . '<br/>';
    endwhile;
    $mysqli->close();
    return $return;
}}
于 2010-12-28T16:42:43.703 回答