在1个MySQL查询中合并2个下拉列表的值

时间:2014-02-19 21:08:47

标签: php html mysql

我有以下代码,我想用它来结合MySQL查询中下拉列表的日期值,所以我可以按日期过滤。

<form action="" method="post">
<label class="custom-select">
<select name="q">
<option value="">Selecione o Mês:</option>
<option value="MONTH(post_date) = 1''">Jan</option>
<option value="MONTH(post_date) = 2''">Feb</option>
<option value="MONTH(post_date) = 3''">Mar</option>
<option value="MONTH(post_date) = 4''">Apr</option>
<option value="MONTH(post_date) = 5''">May</option>
<option value="MONTH(post_date) = 6''">Jun</option>
<option value="MONTH(post_date) = 7''">Jul</option>
<option value="MONTH(post_date) = 8''">Aug</option>
<option value="MONTH(post_date) = 9''">Sep</option>
<option value="MONTH(post_date) = 10''">Oct</option>
<option value="MONTH(post_date) = 11''">Nov</option>
<option value="MONTH(post_date) = 12''">Dez</option>
</select>
</label>
<label class="custom-select">
<select name="q">
<option value="">Selecione o Ano:</option>
<option value="AND YEAR(post_date) = 2013">2013</option>
<option value="AND YEAR(post_date) = 2014">2014</option>
<option value="AND YEAR(post_date) = 2015">2015</option>
</select>
</label>
<input name="submit2" id="submit2" style="margin-left: 15px;" type="submit" value="Pesquisar">
</form>

<?php 
if ($_POST['q'] == '') {
    $q = 'YEAR(post_date) = YEAR(CURDATE())';
}
else {
    $q = $_POST['q'] ;
}

$query=mysql_query("SELECT *, 'Yield'
FROM wp_posts
WHERE p.post_status = 'publish' AND ".$q." 
LIMIT 0, 2500")
?>

这不起作用,我收到错误:你的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'AND YEAR(post_date)= 2014

附近使用正确的语法

有人可以提供帮助。感谢

1 个答案:

答案 0 :(得分:0)

这是解决问题的一种非常糟糕的方法。除其他外,您依赖于字段值以正确的顺序返回,这是不能保证的。使用SQL注入攻击它也是微不足道的。

但要回答你的问题:''条款之后的MONTH()可能会搞砸了。您的查询可能是

SELECT *, 'Yield'
FROM wp_posts
WHERE p.post_status = 'publish' AND MONTH(post_date) = 6''AND YEAR(post_date) = 2014

但是没有简单的方法可以解决这个问题而不会让糟糕的代码变得更糟。