1

我无法使以下代码工作:

    // dd/mm/yyyy for dates in SQL queries
    $todayforw = date('d/m/Y');
    $aweekago  = date('d/m/Y', time() - 604800);

    $week_e_check = mysql_query("SELECT * FROM earningslog WHERE user_id = '".$info['id']."' WHERE day >='".$aweekago."' AND day <'".$todayforw."'");

    while ($week_e_info = mysql_fetch_array($week_e_check)) {
        $week_e = $week_e + $week_e_info['user_earnings_amnt'];
    }

该查询返回零行,但是,它应该返回与条件匹配的数据。

4

4 回答 4

1

您的问题似乎与您的查询语法有关。您在声明 WHERE 两次,而您应该只声​​明一次,然后使用 AND 或 OR 运算符作为进一步的标准。我还建议您将语句移动到变量中或用于die()协助调试。

 $week_e_check = mysql_query("SELECT * FROM earningslog WHERE user_id = '".$info['id']."' AND day >='".$aweekago."' AND day <'".$todayforw."'") or die(mysql_error()); 

此外,您不应该使用 mysql 扩展,因为不鼓励使用此扩展。相反,请使用MySQLiPDO_MySQL扩展。使用其中一个替代扩展将有助于作为防止 SQL 注入的第一步。我还建议您避免使用*并指定要返回的列名。

使用 PDO:

<?php

/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('SELECT * FROM earningslog WHERE user_id = ? AND day >= ? AND day < ?');
$sth->execute(array($info['id'], $aweekago, $todayforw));
$results = $sth->fetchAll();

?>
于 2012-08-21T21:21:29.540 回答
1

尝试将字符串的格式从 d/m/Y 更改为 Ymd。

MySQL 可能会在第一年期待它。在这种情况下,它可能会用 d/m/Y 做错事。

也不要两次使用 WHERE 子句。相反,使用 AND 组合条件,例如:

WHERE      user_id = '".$info['id']."'
       AND day >='".$aweekago."'
       AND day <'".$todayforw."'

顺便说一句,您也可以尝试说WHERE day BETWEEN ".$aweekago." AND ".$todayforw.",这可能更容易阅读语法(只要您将 $todayforw 更改为前一天)。

于 2012-08-21T21:12:39.933 回答
1

检查您的日期格式:

应该:

YYYY-mm-dd HH:mm:ss

EG 2012-01-01 00:00:00(当地时间 2012 年 1 月 1 日午夜)

其他日期格式可能有效,但最好的方法是使用 MySQL 在显示日期时使用的相同格式,这是我知道每次都有效的唯一方法。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

此外,您的语法不正确,您有两个 where,您应该使用 AND。

于 2012-08-21T21:15:05.443 回答
1

仔细查看您的查询:

  SELECT * FROM earningslog WHERE user_id = '".$info['id']."' WHERE day >='".$aweekago."' AND day <'".$todayforw."'"

您的 Where 子句出现两次。

有两件事需要考虑——当你选择数据时,尽量远离 select *——你可能会得到表被修改过的意外结果。

其次,尝试将查询创建为参数化查询,而不是将参数直接注入 where 子句。通过以您的方式直接注入您的标准,您将面临 SQL 注入攻击。

通过将其转换为参数化查询,您可以获得直接针对数据库调试查询的附带好处,从而减少将查询工具从查询工具复制到代码中所需的工作量。

于 2012-08-21T21:17:26.593 回答