Php 如果参数为空,则构造并查询
我允许我的用户按10个不同的标准进行搜索。我是从url中选择的。但问题是这些标准中是否有一些是空的。然后,它将搜索数据库中的记录,其中是空记录Php 如果参数为空,则构造并查询,php,mysql,Php,Mysql,我允许我的用户按10个不同的标准进行搜索。我是从url中选择的。但问题是这些标准中是否有一些是空的。然后,它将搜索数据库中的记录,其中是空记录 $pretrazi_drzava=quote_smart($_GET["pretrazi_drzava"]); $pretrazi_broj=quote_smart($_GET["pretrazi_broj"]); $pretrazi_spol=quote_smart($_GET["pretrazi_spol"]); $pretrazi_boja=quo
$pretrazi_drzava=quote_smart($_GET["pretrazi_drzava"]);
$pretrazi_broj=quote_smart($_GET["pretrazi_broj"]);
$pretrazi_spol=quote_smart($_GET["pretrazi_spol"]);
$pretrazi_boja=quote_smart($_GET["pretrazi_boja"]);
$pretrazi_rasa=quote_smart($_GET["pretrazi_rasa"]);
$pretrazi_ime=quote_smart($_GET["pretrazi_ime"]);
$pretrazi_godina=quote_smart($_GET["pretrazi_godina"]);
$pretrazi_status=quote_smart($_GET["pretrazi_status"]);
$pretrazi_otac=quote_smart($_GET["pretrazi_otac"]);
$pretrazi_majka=quote_smart($_GET["pretrazi_majka"]);
这是很容易做到的
...AND (mg_drzava.drzava='$pretrazi_drzava'
OR mg_golub.brojgoluba='$pretrazi_broj'
OR mg_golub.spol='$pretrazi_spol'
OR mg_golub.boja='$pretrazi_boja'
OR mg_golub.rasa='$pretrazi_rasa'
OR mg_golub.ime='$pretrazi_ime'
OR mg_golub.godina='$pretrazi_godina'
OR mg_status.status='$pretrazi_status'
OR O.brojgoluba='$pretrazi_otac'
OR M.brojgoluba='$pretrazi_majka')...
但如果取而代之或u put,并且例如仅mg_golub.brojgolub=''
为空,则它将搜索数据库中brojgolub
为空的所有记录,它将不会找到任何内容,也不会作为结果显示任何内容
如何解决这种情况?也许你可以使用
AND (b.a='' OR b.a='$a')
相反。如果要同时应用多个条件,则需要AND参数,例如性别为“男性”,年龄为“35”。如果用户没有传递一些参数,这可能意味着他不知道这些参数,或者关心它们:性别是男性,我不关心年龄。如果是这种情况,您需要从查询中排除该条件,而不是使用只会减慢查询速度的额外条件。您可以使用foreach并迭代$\u GET数组来构造SQL语句
$sql = "SELECT * FROM table";
if(count($_GET) > 0)
{
// Append WHERE clause
$sql .= " WHERE ";
// Construct WHERE
foreach($_GET as $key => $value)
{
if($value != '')
{
$sql .= ' '.$key.' = '.$value.' AND ';
}
}
// Remove last "AND"
$sql = trim( $sql, 'AND ');
}
我没有测试这段代码,只是为了参考如何忽略SQL语句中的emtpy值。希望这有帮助
更新:在查询中避免1=1如果要跳过空参数,则
where (someparam1 is null or (someparam1 = somecolumn1))
and (someparam2 is null or (someparam2 = someColumn2)
and ...
这是你想走的路
如果quotesmart始终返回字符串,则
where ((someparam1 = '') or (someparam1 = somecolumn1))
and ((someparam2 = '') or (someparam2 = someColumn2)
and ...
如果不想在sql中放入不需要的参数,则生成所选参数的列表/散列,并从中生成参数化sql语句,然后设置参数值。如果它确实为空,那么你想用它做什么呢?这种方法看起来像是一个地狱般的设计失败。
quote\u smart
这样的功能是一个非常非常糟糕的主意。请不要用这些。首先,你为什么不习惯避免所有这些呢?PDO的命名参数将显著地解决这个问题。只有在填充了有问题的值时,才应该在查询中附加条件。否则,请忽略这一点。提出问题的人甚至似乎对听到答案都不感兴趣。这是有帮助的,但有时人们希望按照不同的标准进行搜索,有时使用AND,有时使用What isb
?我在原来的问题中看不到这一点。