Php 在mysql搜索中禁用空值
我的数据库表有许多列。 我想基于多个列进行搜索。 有时它可能不是某些列的值。 如何使sql查询中的这些字段无效? 多谢各位 例如: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' }
$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!=任何东西,它都会自动被排除。谢谢朋友们提供的所有有用的内容。