PHP和MySQL查询-多个条件
下面列出的代码有一个问题,我正在根据用户在表单上选择的搜索条件对数据库进行查询 目前,仅以作者的姓名查询数据库效果良好。但是,如果我取消注释其余的if-else语句,则所有查询都不起作用。我只得到一张空白表,没有返回结果 我试过每个if/else语句,其他语句都被注释掉了,它们自己都可以很好地工作,但当它们都没有注释时就不行了 谁能给我指出正确的方向吗PHP和MySQL查询-多个条件,php,mysql,Php,Mysql,下面列出的代码有一个问题,我正在根据用户在表单上选择的搜索条件对数据库进行查询 目前,仅以作者的姓名查询数据库效果良好。但是,如果我取消注释其余的if-else语句,则所有查询都不起作用。我只得到一张空白表,没有返回结果 我试过每个if/else语句,其他语句都被注释掉了,它们自己都可以很好地工作,但当它们都没有注释时就不行了 谁能给我指出正确的方向吗 $query = "SELECT * FROM books WHERE book_no IS NOT NULL"; if ($_POST['
$query = "SELECT * FROM books WHERE book_no IS NOT NULL";
if ($_POST['author'])
$query .= " AND '$author' = author";
/*
else if ($_POST['author'] AND $_POST['year'])
$query .= " AND '$author' = author AND '$year' = year";
*/
/*
else if ($_POST['cover_art']) {
$query .= " AND '$cover_art' = cover_art";
}
*/
/*
else if ($_POST['interior_art']) {
$query .= " AND '$cover_art' = cover_art";
}
else {
// do something else
}
*/
检查此解决方案:
$author='Bred';
$year='2012';
$cover_art='';
$queryA=array();
if ($author<>'') $queryA []= "'$author' = author";
if ($year<>'') $queryA []= "'$year' = year";
if ($cover_art<>'') $queryA []= "'$cover_art' = cover_art";
$query = "SELECT * FROM books WHERE book_no IS NOT NULL";
if(count($queryA)>0) $query.=' AND '.implode(' AND ',$queryA);
echo $query;
$author='breed';
$year='2012';
$cover_art='';
$queryA=array();
如果($author“”)$queryA[]=“$author'=作者”;
如果($year“”)$queryA[]=“$year'=year”;
如果($cover\u art“”)$queryA[]=“$cover\u art'=封面艺术”;
$query=“从账簿编号不为空的账簿中选择*”;
if(count($queryA)>0)$query.='AND'。内爆('AND',$queryA);
echo$query;
首先:您真的应该为您的数据库使用或等效的。其次,您是否尝试过打印查询并手动运行它们?也许它们根本不匹配数据库中的任何内容。第三,是否检查所有返回错误的数据库函数上的错误?最后,变量$author、$cover\u art和$year set在哪里?在这段代码中你没有显示出来。谢谢你的回复。我尝试过手动运行查询,但结果很好。$author、$cover\u art和$year变量在发布代码之前声明如下:$author=$\u POST['author'];$cover\u art=$\u POST['cover\u art'];$interior\u art=$\u POST['interior\u art'];$year=$_POST['year'];谢谢你的回复。我注意到在你发布的代码中,你已经硬编码了作者、年份和封面艺术的值。如果我想使用使用POST方法通过表单获得的值,该怎么办?这段代码很难阅读。考虑使用<代码> EMPTY()/<代码>,并支持<代码> > 语句。还有,你为什么要先检查是否有书?@JamesWhelan只需使用if(isset($\u POST['author'])$author=$\u POST['author'];否则$author='';等等。注意mysql注入。@andy是的,但我使用原始代码并做了一些小的更改。这样更容易看到更改