2012-12-19 28 views
1

我的数据库表有很多列。 我想根据多列进行搜索。 有时它可能不是某些列的值。 sql查询中的这些字段如何无效? 谢谢。在mysql搜索中禁用空值

为examle:

$C1=$_POST[c1]; 

$C2=$_POST[c2]; 

SELECT * FROM mytable WHERE column1='$c1' AND column2='$c2' 

我想如果C2被清零,从SQL查询禁用它。

一种方法是:

if(!$_POST[C2]){ 
    SELECT * FROM mytable WHERE column1='$c1' 
} 

...

我想做到这一点通过SQL查询来这样做,因为我的表有很多列。

+0

根据定义,如果你正在寻找一个特定的值,那么作为NULL!=任何东西,那么它将被自动排除。 – Ben

回答

2

首先,你不应该写像这样的变量的查询。了解有关PDO/mysqliprepared statements

其次,数组的键引用应该是字符串或整数;表达式$_POST[c1]很可能会导致通知并隐式转换为字符串。最好写$_POST['c1']

第三,为了回答您的问题,您可以使用isset()strlen()来确定值是否为“空”,即空字符串。

$params = array($_POST['c1']); // you should also check whether $_POST['c1'] is defined too 
$sql = 'SELECT * FROM `table_name` WHERE column1 = ?'; 
if (isset($_POST['c2']) && strlen($_POST['c2'])) { 
    $sql .= ' AND column2 = ?'; 
    $params[] = $_POST['c2']; 
} 

$stmt = $db->prepare($sql); 
$stmt->execute($params); 
0

生成由通过POST值迭代,加入条件如果相应POST参数不是空的条件的数组:

$conditions = array(); 
foreach ($_POST as $key => $value) { 
    if (!empty($value)) { 
    $conditions[] = 
     $dbcolumn[$key] . " = '" . mysql_real_escape_string($value) . "'"; 
    } 
} 

您需要有POST变量匹配到一个数组$dbcolumn数据库列(或者你必须提供其他翻译方法)。

现在创建一个SQL查询中给定的条件:

$query = 'SELECT * FROM mytable'; 
if (!empty($conditions)) { 
    $query .= ' WHERE ' . join(' AND ', $conditions); 
} 

需要注意的是,它提供了mysql_real_escape_string()扩展deprectaded。你可能应该使用其他扩展来与MySQL服务器通信,而不必使用其他扩展的重复调用。

0

这个代码不推荐,但如果你真的想这样做在MySQL中,你可以用这样的语法如下:

SELECT * FROM mytable WHERE column1="$c1" AND column2="$c2%" 

之前或$ C2后添加%字符

请不要” t做到这一点!

+0

谢谢各位朋友提供的所有有用内容。 –