这是我第一次尝试使用面向对象的编程。我正在尝试从数据库重复时间段,但我只得到一个结果。
时间表包含:
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
答案 0 :(得分: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;
}
答案 1 :(得分:1)
return语句使while循环不再继续,并退出该函数。您需要修改函数以返回时隙数组,或者修改逻辑以仅期望数据库中的第一个结果。
答案 2 :(得分: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;
}
}
答案 3 :(得分: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";
答案 4 :(得分: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;)不是很易读,但人们可以就此辩论。
答案 5 :(得分: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;
}}