PHP 没有从我的数据库查询中获取所有行

PHP doesn't fetch all rows from my database query

我有以下代码:

if(isset($_POST['period'])){
    $query_str = "SELECT `id` FROM `orders` WHERE `status` = 'Send' AND `date` BETWEEN '".date('Y-m-d H:i:s', time()-$_POST['period'])."'  AND  '".date('Y-m-d H:i:s', time())."'  ";
    echo $query_str;
    $query = mysql_query($query_str) or die(mysql_error());
    $arr = mysql_fetch_assoc($query);
    var_dump($arr);

}

结果我有这两个字符串:

// this value of $query_str
SELECT `id` FROM `orders` WHERE `status` = 'Send' AND `date` BETWEEN '2015-06-04 03:11:08'  AND  '2015-06-11 03:11:08' 

// var_dump of my $arr
array(1) {
  ["id"]=>
  string(2) "25"
} 

这个结果是错误的,但是当我复制 $uqery_str 值并将其放入 phpMyAdmin 时,我得到了 3 个结果。

25,26,27 // this is right

谁能解释一下哪里出了问题?

那是因为您只获取了第一行。将您的提取调用放入 while 循环以提取所有行,例如

$arr = mysql_fetch_assoc($query);
var_dump($arr);

至:

while($arr = mysql_fetch_assoc($query)) {
    var_dump($arr);
}

$query 是一种资源,使用 mysql_fetch_assoc() 可以从资源中逐行获取。根据手册:

Returns an associative array that corresponds to the fetched row and moves the internal data pointer ahead.

既然我们都在这里,我今天给你一个晚安故事

mysql_* 已弃用,并在 PHP 的新版本中删除。所以我强烈建议您查看 PDO or mysqli_* prepared statements