如何进行忽略未定义变量的查询?

时间:2013-07-04 11:03:48

标签: php mysql

如何通过用户以html格式编写的内容来定义mysql搜索,并且如果某个表单框保持为空,则mysql应该忽略它。例如:

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

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

3 个答案:

答案 0 :(得分: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

还有一个通读this,您使用的是不推荐使用的mysql库。

答案 1 :(得分:0)

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

<?php
$sql = "SELECT * FROM catalog WHERE (name= '".$name."' OR name IS NULL) AND (publisher = '".$publisher."' OR publisher IS NULL)";
mysql_query($sql);

答案 2 :(得分:0)

尝试

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

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

如果发布者是空的,那么你需要传递NULL值并且PLZ注意这是一个不好的实践。它会导致许多sql注入问题。尝试对事物进行验证