Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和MySQL查询-多个条件_Php_Mysql - Fatal编程技术网

PHP和MySQL查询-多个条件

PHP和MySQL查询-多个条件,php,mysql,Php,Mysql,下面列出的代码有一个问题,我正在根据用户在表单上选择的搜索条件对数据库进行查询 目前,仅以作者的姓名查询数据库效果良好。但是,如果我取消注释其余的if-else语句,则所有查询都不起作用。我只得到一张空白表,没有返回结果 我试过每个if/else语句,其他语句都被注释掉了,它们自己都可以很好地工作,但当它们都没有注释时就不行了 谁能给我指出正确的方向吗 $query = "SELECT * FROM books WHERE book_no IS NOT NULL"; if ($_POST['

下面列出的代码有一个问题,我正在根据用户在表单上选择的搜索条件对数据库进行查询

目前,仅以作者的姓名查询数据库效果良好。但是,如果我取消注释其余的if-else语句,则所有查询都不起作用。我只得到一张空白表,没有返回结果

我试过每个if/else语句,其他语句都被注释掉了,它们自己都可以很好地工作,但当它们都没有注释时就不行了

谁能给我指出正确的方向吗

$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是的,但我使用原始代码并做了一些小的更改。这样更容易看到更改