1

我的数据库表有很多列。我想根据多列进行搜索。有时它可能不是某些列的值。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 查询来做,因为我的表有很多列。

4

3 回答 3

2

首先,你永远不应该这样编写带有变量的查询。了解PDO / mysqli准备好的语句

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

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

$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);
于 2012-12-19T14:51:11.307 回答
0

通过遍历 POST 值来构建条件数组,如果相应的 POST 参数不为空,则添加一个条件:

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

您将需要一个将$dbcolumnPOST 变量与数据库列匹配的数组(或者您必须提供一些其他方式在两者之间进行转换)。

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

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

请注意,提供mysql_real_escape_string()的扩展已被弃用。您可能应该使用其他一些扩展来与 MySQL 服务器通信,而不必使用其他扩展的 repsective 调用。

于 2012-12-19T14:52:17.807 回答
0

不推荐此代码,但如果您真的想在 MySQL 上执行此代码,您可以使用 LIKE 语法,如下所示:

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

在 $c2 之前或之后添加 % 字符

请不要这样做!

于 2012-12-19T15:49:08.673 回答