Php 在mysql搜索中禁用空值

Php 在mysql搜索中禁用空值,php,mysql,null,Php,Mysql,Null,我的数据库表有许多列。 我想基于多个列进行搜索。 有时它可能不是某些列的值。 如何使sql查询中的这些字段无效? 多谢各位 例如: $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查询中的这些字段无效? 多谢各位

例如:

$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查询来完成,因为我的表有很多列。

首先,您不应该这样编写包含变量的查询。了解/和

第二,数组的键引用应该是字符串或整数;表达式
$\u POST[c1]
很可能会引起通知并隐式转换为字符串。最好写
$\u 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);

通过迭代POST值构建条件数组,如果相应的POST参数不为空,则添加条件:

$conditions = array();
foreach ($_POST as $key => $value) {
  if (!empty($value)) {
    $conditions[] =
      $dbcolumn[$key] . " = '" . mysql_real_escape_string($value) . "'";
  }
}
您将需要一个数组
$dbcolumn
,该数组将POST变量与数据库列相匹配(或者您必须提供在两者之间进行转换的其他方法)

现在为给定条件创建SQL查询:

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

请注意,不推荐使用提供的扩展。您可能应该使用其他扩展与MySQL服务器通信,而不必使用其他扩展的repsective调用。

不建议使用此代码,但如果您确实想在MySQL上执行此操作,可以使用类似语法:

SELECT * FROM mytable WHERE column1="$c1" AND column2="$c2%"
在$c2之前或之后添加%字符


请不要这样做

根据定义,如果要查找特定的值,则为NULL!=任何东西,它都会自动被排除。谢谢朋友们提供的所有有用的内容。