PHP MySQL Select * From Where Date<今天

时间:2014-05-30 05:25:29

标签: php mysql

所以我正在构建一个能够打印出联盟赛程的功能。当我试图拉开最后5场比赛时,我遇到了一些障碍。这是我的代码:

$ league ID,$ direction和$ limit由函数参数设置。

$matches = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'leagueDesigner_season_matches WHERE leagueID = ' . $leagueID . ' and date < CURRENT_DATE() ORDER BY date ' . $direction . ' LIMIT 0, ' . $limit);

Appologies,我忘了完成这个帖子。代码返回所有日期,而不仅仅是今天之前的日期。

1 个答案:

答案 0 :(得分:1)

您观察到的行为最可能的解释是名为date的列被定义为除DATE,DATETIME或TIMESTAMP之外的数据类型。 (可能,你已经将它定义为一个整数或varchar),并且MySQL没有做一个&#34; date&#34;比较,它比较字符串或整数。

但缺少date专栏的定义,这只是猜想。


如果&#34;阻碍&#34;你点击的是从MySQL返回的错误,我建议调试SQL语句的问题是你将SQL文本构建成一个字符串变量,作为一个单独的步骤,然后回显(或printf或vardump)内容在尝试执行它之前,包含SQL文本的变量。

$sql = "SELECT foo FROM bar WHERE fee = " . $val . " ORDER BY foo DESC LIMIT 1 ";
echo $sql;

并验证回显的字符串是您要发送到数据库的SQL文本;获取该字符串并尝试通过另一个MySQL客户端执行它是验证语句执行的有效方法,并返回您期望的结果集。

如果使用任何保留字作为列名,则可能需要使用tablename,rowsource别名等限定这些列名,或将其括在反引号中。 (编辑:DATE不是MySQL 5.5中的保留字)

 ... FROM mytable t WHERE t.date = ...

 ... FROM mytable t WHERE `date` = ...

还要注意包括&#34;不安全&#34; SQL文本中的变量可能导致SQL注入漏洞。

例如,

 $val = '1 OR 1=1'; 
 $sql = "SELECT * FROM mytable WHERE id = ' . $val ;