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

Php 在1 MySQL查询中合并2个下拉列表的值,php,html,mysql,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<

我有下面的代码,我想用它在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")
?>

Selecione o Mês:
简
二月
破坏
四月
也许
六月
七月
八月
九月
十月
十一月
迪兹
Selecione o Ano:
2013
2014
2015

这是一个非常糟糕的解决问题的方法。除此之外,您还依赖于字段值以正确的顺序返回,这并不能保证。使用SQL注入攻击这一点也很简单

但是要回答你的问题:
'
MONTH()
子句之后的
'
可能把事情搞砸了。您的查询结果可能是

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

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

您的代码完全可以用于sql注入,而且您在查询1中有2个and运算符,在查询和1中是硬编码的,并且来自POST请求。调试此类错误的一个有用方法是
echo
向DB传递的确切查询服务器。问题是将提交值传递给查询检查单引号在月份值
month(post_date)=1''上的位置。我在该部分犯了一个错误,但这不是错误。我得到的是:您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解使用“近”和“年(post_date)=2014的正确语法。您可以编辑问题以显示代码的最新版本吗?否则我们只是猜测。