我有下面的代码,我想用它在 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 附近使用的正确语法
有人可以帮忙吗?谢谢
最佳答案
这是一个非常糟糕的解决问题的方法。除此之外,您依赖于字段值以正确的顺序返回,但不能保证这一点。通过 SQL 注入(inject)攻击这个问题也很简单。
但是回答你的问题:MONTH()
子句后面的''
可能会把事情搞砸。您的查询可能会显示为
SELECT *, 'Yield'
FROM wp_posts
WHERE p.post_status = 'publish' AND MONTH(post_date) = 6''AND YEAR(post_date) = 2014
但是没有简单的方法可以解决这个问题而不会使糟糕的代码变得更糟。
关于php - 将 2 个下拉列表的值合并到 1 个 MySQL 查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21892455/