index.php
中的输入和脚本<input type="text" class="filter" id="frClientName" name="cl_name">
<script>
$(".filter").on('change keydown keyup', function(){
var clname;
clname = document.getElementById("frClientName").value;
$("#spravaContent").load("php/search_results/sprava.php?cl_name=" + clname;
});
</script>
的PHP / search_results / sprava.php
$clname = '';
if ( isset ( $_GET['cl_name'] ) ) {
$clname = $_GET['cl_name'];
}
$sql = ("
SELECT * FROM `db`.`table`
WHERE cl_full_name LIKE '%".$_GET['cl_name']."%'
");
如何正确使用WHERE子句,并且仅当变量不为空时? 谢谢你的指导。
修改
$sql = ("
SELECT * FROM `db`.`table`
ORDER BY {$oby} {$ohow}
WHERE cl_full_name LIKE '%".$_GET['cl_name']."%'
OR '' = '".$_GET['cl_name']."'
LIMIT $start_sprava,$per_page_sprava
");
答案 0 :(得分:2)
有点hacky,但我用CASE
语句处理了这样的情况。你评估你的论点,如果它不符合你需要的条件,你使用一个明显真实的语句,如1=1
,其结果是保持WHERE
子句的一部分参与过滤结果集。
SELECT *
FROM `db`.`table`
WHERE CASE WHEN TRIM('".$_GET['cl_name']."') IS NOT NULL THEN cl_full_name LIKE '%".$_GET['cl_name']."%'
ELSE 1=1
END
ORDER BY {$oby} {$ohow}
LIMIT {$start_sprava}, {$per_page_sprava}
;
不要忘记警告你的输入,这样你就不会遇到Little Bobby Tables问题。此外,ORDER BY
和LIMIT
条款通常位于WHERE
子句之后。
答案 1 :(得分:1)
无论是否设置,使where子句起作用。
如果未设置变量,假设您的应用语言返回文本“null”:
"SELECT * FROM `db`.`table`
WHERE cl_full_name LIKE '%".$_GET['cl_name']."%'
OR 'null' = '".$_GET['cl_name']."'"