我有一个包含3个输入字段的查询,我希望查询显示结果,如果填写了一个或两个或所有3个输入。所以,我尝试使用is null,但它不起作用或我可以做这有一个和/或查询?
$sql = "SELECT * FROM profiles";
$sql .= " WHERE (profilename = '". $_POST["profilename"] ."' OR profilename IS NULL) ";
$sql .= " AND (ort = '". $_POST["ort"] ."' OR ort IS NULL) ";
$sql .= "AND (jahren = '" . $_POST["alter"] . "' OR jahren IS NULL) ";
非常感谢你的帮助!
答案 0 :(得分:0)
试试这个:
$sql = "
SELECT * FROM profiles
WHERE (profilename = '$_POST[profilename]' OR profilname = NULL)
OR (ort = '$_POST[ort]' OR ort = NULL)
OR (jahren = '$_POST[alter]' OR jahren = NULL)
";
<强>建议:强>
此$string = "Test $test also";
优于$string = "Test " . $test . " also";
。
仅当您添加"
时,才会'
。
<强> 被修改.. 强>
答案 1 :(得分:0)
在发送查询之前检查是否填写了任何输入字段:
if ( isset($_POST['profilename']) || isset($_POST['ort']) || isset($_POST['alter']) ){
$clause = "where ";
$conds = [];
if (!empty($_POST['profilename'])) $conds[] = "profilename = '{$_POST['profilename']}'";
if (!empty($_POST['ort'])) $conds[] = "ort = '{$_POST['ort']}'";
if (!empty($_POST['alter'])) $conds[] = "alter = '{$_POST['alter']}'";
if(count($conds) > 0){
$clause .= (count($conds) == 1)? $conds[0] : implode(' AND ',$conds);
$sql = "SELECT * FROM profiles " . $clause;
...
// sending query
}
}
答案 2 :(得分:0)
我会将您的代码更新为以下内容:
$sql = "SELECT * FROM profiles WHERE 1=1";
/* We use 'WHERE 1=1' so that we can chain all of our filters after this
using 'AND' (or 'OR' in other situations) regardless of whether we are using the first of these filters or not */
if(isset($_POST["profilename"]) && $_POST["profilename"] != "")
$sql .= " AND profilename = '". $_POST["profilename"] ."'";
if(isset($_POST["ort"]) && $_POST["ort"] != "")
$sql .= " AND ort = '". $_POST["ort"] ."'";
if(isset($_POST["alter"]) && $_POST["alter"] != "")
$sql .= " AND jahren = '" . $_POST["alter"] . "'";
这将检查每个变量,然后将其包含在查询中。 对于其他POST变量,只需以相同的格式复制和粘贴它们。
另外,我建议使用预准备语句而不是内联转储POST变量,以避免SQL注入攻击等。