PHP+MySQL查询:意外结果(仅适用于少量结果)
尝试根据用户给定的开始日期和结束日期显示MySQL数据库的结果。代码如下:PHP+MySQL查询:意外结果(仅适用于少量结果),php,mysql,date,Php,Mysql,Date,尝试根据用户给定的开始日期和结束日期显示MySQL数据库的结果。代码如下: //Getting Values From Other Page $start_date = date("Y-m-d", strtotime($_GET["date3"])); $end_date = date("Y-m-d", strtotime($_GET["date4"])); //Server Connection Info $server = "server_name"; $db_user = "us
//Getting Values From Other Page
$start_date = date("Y-m-d", strtotime($_GET["date3"]));
$end_date = date("Y-m-d", strtotime($_GET["date4"]));
//Server Connection Info
$server = "server_name";
$db_user = "username";
$db_pass = "pass";
$db_name = "dbname";
//Server Connection + Query
$link = mysql_connect($server,$db_user,$db_pass);
if(!$link)
{
die("Could Not Connect:".mysql_error());
}
mysql_select_db($db_name, $link) or die('Can\'t use db:'. mysql_error());
if ($start_date == $end_date){
$query = "SELECT col_a, col_b, col_c, col_d FROM main WHERE date='".$start_date."'";
}
else {
$query = "SELECT col_a, col_b, col_c, col_d FROM main WHERE date BETWEEN '".$start_date."' AND '".$end_date."'";
}
$result = mysql_query($query,$link) or die('Query Error'.mysql_error());
?>
<!-- HTML CODE STARTS HERE -->
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="qc_style.css" />
<link href='http://fonts.googleapis.com/css?family=Days+One' rel='stylesheet' type='text/css' />
</head>
<body>
<?php
$row = mysql_fetch_assoc($result);
$row_count = mysql_num_rows($result);
echo $row;
echo $row_count;
if($row_count!=0){
echo "<table>";
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>";
foreach($row as $value)
{
echo $value;
echo "</td><td>";
}
echo "<a href=\"qc_campedit.php?id=".$row['call_id']."\">Edit</a></td></tr>";
}
echo "</table>";
} //end of if statement
else {echo " Sorry, No records match your query";}
?>
</body>
</html>
我的数据库中有两行2011-08-25的数据和一行2011-08-24的数据
当我将开始日期和结束日期指定为2011-08-24时,我得不到
回答
但是,当我将开始日期和结束日期指定为2011-08-25时,我
仅获取属于2011-08-25的一行数据
当我指定开始日期为2011-08-24,结束日期为
2011-08-25,我得到了属于2011-08-25的两行数据和属于2011-08-25的一行数据。
但是,当我将开始日期和结束日期指定为2011-08-23时,我会得到属于2011-08-23的所有20行数据
注意:该特定时间段的数组数(以$result为单位)显示正确。i、 例如,2011-08-24的$row_count=1,2011-08-24的$row_count=2
我如何解决这个问题?提前感谢。如果要选择较少的列,请不要使用select*FROM。。。而是从表中选择A列的名称,B列的名称 另外,我建议通过$\u请求对正在接受的日期字符串进行清理,并将其传递到查询中。类似于
$start_date = date("Y-m-d", strtotime($_REQUEST["date3"]));
应该足够了。中间只是一种指定包含范围的方法。我认为在db中,日期列有DATETIME列,所以在“2011-08-24”和“2011-08-24”之间,返回的只是带有“2011-08-24 0:00:00”的记录。要想做你想做的事,你需要写作
WHERE date您的“datetime”列介于“2011-08-24”和“2011-08-24”之间。只需添加一件事。如果您知道您的数据来自何处,请专门使用该来源,并避免$u请求 它本身并不危险,但在某些情况下,它可能会带来安全风险,因为它使用了一个回退系统,实际上可能会从您不想去的地方提取数据。也就是说,$\u请求遵循您的EGPCS设置,这意味着如果在$\u ENV中找不到请求的数据,它将前进到$\u GET、$\u POST、$\u COOKIE等,而您不希望这样
如果您的数据专门来自GET,那么使用$\u GET['date3']您对mysql\u fetch\u assoc的第一个调用就是获取第一行。然后进入循环,它获取的第一行是下一行,即第一行。我稍微更新了下面的代码,使用mysql_num_行来显示结果的数量
<?php
$row_count = mysql_num_rows($result);
echo $row_count;
if($row_count==0) {
echo "Sorry, no records match your query";
else {
echo "<table>";
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>";
foreach($row as $value)
{
echo $value;
echo "</td><td>";
}
echo "<a href=\"qc_campedit.php?id=".$row['call_id']."\">Edit</a></td></tr>";
}
echo "</table>";
}
?>
很抱歉,没有仔细检查您的三个用例。 但首先我在代码中看到,获取第一行只是为了知道行数。 我对此补充了一些意见:
$row = mysql_fetch_assoc($result); // get row 1 from mysql-result
$row_count = count($row); // always the number of attributes returned in one row
echo $row;
echo $row_count;
if($row_count!=1) { // always true
// fetch lines 2-n and write to table
}
如果需要返回的行数,请使用mysql\u num\u rows。日期列的数据类型是什么?日期列的数据类型是DATEModified查询和日期,结果仍然相同。不,该列只是日期列,不是DATETIME。感谢您修改了代码,但仍然没有得到正确的结果。$row_计数显示2多亏了mysql_num_rows$result,但只显示了一行。。。$result中的行数较少时似乎就是这种情况。