foreach数组保持返回第一个值?

时间:2014-05-17 04:43:54

标签: php sql arrays wordpress foreach

首先,我不知道php,我当然不知道sql或wordpress如何与它交互,但我必须使用php等所以我在这里。所以请尽量清楚简单地解释一下。

我在sql wordpress表中添加了三个值。两个值共享相同的room_id(1),第三个值的值为(2)。它们每个在表中都有不同的开始和结束日期。在尝试移动到下一个房间之前,我首先尝试遍历每个room_id,检查日期。我有更多的代码与此功能,但基本上我的问题是我似乎只是每次迭代打印出数组的第一个值。这是代码:

<?php 
/*Plugin Name: HotelMania Functions*/
function checkRoom() {
    global $wpdb;
    $query = "SELECT * FROM hm_booking ORDER BY room_id DESC";
    $rooms = $wpdb->get_results($query);    
    foreach ($rooms as $room) {
       $test= $wpdb->get_var("SELECT room_id FROM hm_booking");
       echo $test;
}    
}
add_shortcode('TEST', 'checkRoom');
?>

当我尝试使用room_id或start_date测试值时,我会继续在表中获得第一个值。但我认为我的sql是正确的,因为它在数据库中工作。请有人帮我看看,但似乎无法弄清楚我做错了什么。

提前致谢。

2 个答案:

答案 0 :(得分:2)

$rooms获得get_results后,您无需使用get_var运行其他查询。

例如,要获取room_id并将其放入$test,而不是

$test= $wpdb->get_var("SELECT room_id FROM hm_booking");

DO

$test = $room->room_id;

答案 1 :(得分:1)

您正在使用"SELECT room_id FROM hm_booking"以及get_var()的SQL语句将返回相同的值,无论如何。 codex提到:

  

get_var函数从数据库返回单个变量。

假设hm_booking表包含多行,那么您运行的SQL语句将返回表中room_id列的多行,而get_var()函数只会返回返回room_id列的第一行。

另外,请考虑利用get_results()。您的第一个SQL查询可能已经存储了您需要的所有内容。 $rooms变量是一个对象,其中包含SELECT查询中的所有行和列:

$query = "SELECT * FROM hm_booking ORDER BY room_id DESC";
$rooms = $wpdb->get_results($query);    
foreach ($rooms as $room) {
    echo 'Room ID:' . $room->room_id; // $room object represents a single row
}