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
。
我有以下代码:
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
。