我有以下代码,我想用它来结合MySQL查询中下拉列表的月和日期值,所以我可以按日期过滤。
<form action="" method="post">
<label class="custom-select">
<select name="q">
<option value="">Month:</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="">Year:</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
附近使用正确的语法有人可以帮忙吗?感谢
答案 0 :(得分:1)
您的月份和<select>
框有name="q"
,因此只有最后一个(本例中为年份)框传递给您的PHP。
将month
和year
分别命名为使用$_POST['month']
和$_POST['year']
<强> HTML 强>
<select name="month">
<option value="01">January</option>
</select>
<select name="year">
<option value="1952">1952</option>
</select>
<强> PHP 强>
$q = $_POST['month'].'-'.$_POST['year']; // this gives you 01-1952
答案 1 :(得分:1)
这可能无法修复,但如果您将引号更改为此
$query=mysql_query('SELECT *, Yield
FROM wp_posts
WHERE p.post_status = publish AND '.$q.'
LIMIT 0, 2500');
它可能会奏效。我认为问题可能出在你在声明中使用两种不同类型的引号。
答案 2 :(得分:0)
您的查询中有两个AND,另外您使用别名p而不定义它:
$query=mysql_query("SELECT *, 'Yield'
FROM wp_posts
WHERE post_status = 'publish' ".$q."
LIMIT 0, 2500");
我建议更改sql驱动程序以更安全(使用绑定参数来准备语句)