在mySQL搜索中禁用零值

  • 本文关键字:mySQL 搜索 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查询来执行此操作,因为我的表有许多列。

首先,您绝对不应编写带有变量的查询。了解PDO/Mysqli和准备的语句。

第二,数组的关键引用应为字符串或整数;表达式$_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);

通过迭代邮政值迭代构建条件数组,如果各自的邮政参数不是空的,则添加条件:

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

您将需要一个与数据库列相匹配的数组$dbcolumn(或者您必须提供两者之间翻译的其他方法)。

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

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

请注意,剥夺了提供mysql_real_escape_string()的扩展名。您可能应该使用其他一些扩展名与MySQL Server交流,并且将不得不使用其他扩展的反复调用。

此代码未推荐,但是如果您确实想在mysql上进行操作,则可以像这样的语法使用:

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

$ C2之前或之后添加%字符

请不要这样做!

相关内容

  • 没有找到相关文章

最新更新