我的数据库表有许多列。我想根据多个列进行搜索。有时可能不是某些列的值。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之前或之后添加%字符
请不要这样做!