所以我正在构建一个能够打印出联盟赛程的功能。当我试图拉开最后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,我忘了完成这个帖子。代码返回所有日期,而不仅仅是今天之前的日期。
答案 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 ;