PHP+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

尝试根据用户给定的开始日期和结束日期显示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 = "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中的行数较少时似乎就是这种情况。