0

如何使 mysql 搜索仅由用户以 html 形式编写的内容定义,如果某些表单框保持为空,mysql 应该忽略它。例如:

$sql = "SELECT * FROM catalog WHERE name= '".$name."' AND publisher = '".$publisher."' ";
mysql_query($sql);

此查询将显示名称和发布者在一起的所有行。现在,如果用户只插入名称,而将发布者框留空怎么办。这个想法是 php/mysql 忽略空表单框,并显示插入名称的每一行。但它不会这样做,因为 $publisher 将是未定义的,并且会出现错误。如何告诉 musql 忽略 $publisher?更一般地说,问题是:如果存在某些条件,如何生成使搜索由某些条件定义的查询,如果不存在,如何忽略它?

4

3 回答 3

2

您可以以编程方式构建 sql。我假设您已经正确地转义了这些值。

$sql = "SELECT * FROM catalog";

$wheres = array();
if (!empty($name)) {
    $wheres[] = " name = '$name'";
}
if (!empty($publisher)) {
    $wheres[] = " publisher = '$publisher'";
}

if (count($wheres)) {
    $sql .= " WHERE " . implode (' AND ', $wheres);
}

//RUN SQL

还请阅读内容,您正在使用已弃用的 mysql 库。

于 2013-07-04T11:09:03.320 回答
0

试试喜欢

$my_var = " ";
if($publisher)   //if(!empty($publisher))
   $my_var = " AND publisher =  '".$publisher."' ";

$sql = "SELECT * FROM catalog WHERE name= '".$name."' ".$my_var;

如果发布者为空,则需要传递NULL值,请注意,这是一种不好的做法。这会导致许多 sql 注入问题。尝试对事物进行验证

于 2013-07-04T11:05:41.863 回答
0

这将允许名称或发布者为NULL.

<?php
$sql = "SELECT * FROM catalog WHERE (name= '".$name."' OR name IS NULL) AND (publisher = '".$publisher."' OR publisher IS NULL)";
mysql_query($sql);
于 2013-07-04T11:05:27.590 回答