我有一个查询要在两个表中搜索空缺。
该查询的变量以具有多个输入/选择的形式发送。一个是用于输入空缺标题的文本输入,另一个是包含空缺可以属于的所有类别的下拉菜单。
当我将文本输入留空并仅选择一个类别时,我得到的所有空缺不只是所选类别中的空缺。
我的查询:
$functie = $_POST['functie']; $branche = $_POST['branche']; $regio = $_POST['regio']; $search = " SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias FROM snm_content cnt LEFT JOIN snm_categories cat ON cat.id = cnt.catid WHERE ('".$functie."' ='' OR cnt.title LIKE '%".$functie."%') OR ('".$branche."' ='' OR cat.title LIKE '%".$branche."%') ";
如果我在不输入文本输入的情况下回显查询,这就是我得到的:
SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias FROM snm_content cnt LEFT JOIN snm_categories cat ON cat.id = cnt.catid WHERE ('' ='' OR cnt.title LIKE '%%') OR ('logistiek' ='' OR cat.title LIKE '%logistiek%')
snm_content是职位空缺,snm_categories是类别。
snm_content
snm_categories
如何仅显示属于所选类别的空缺?
请注意, 您的代码对SQL注入相关的攻击开放。请学习使用预备报表
现在,我们将需要WHERE动态生成查询的一部分。我们可以使用!empty()函数检查输入的过滤器值是否不为空,然后将其条件动态添加到查询中。
WHERE
!empty()
$functie = $_POST['functie']; $branche = $_POST['branche']; $regio = $_POST['regio']; $search = " SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias FROM snm_content cnt LEFT JOIN snm_categories cat ON cat.id = cnt.catid "; // Collect all the where conditions in an array $whr = array(); // check if $functie has some value in input filter if (!empty($functie)) { $whr[] = "cnt.title LIKE '%" . $functie . "%'"; } // check if $branche has some value in input filter if (!empty($branche)) { $whr[] = "cat.title LIKE '%" . $branche . "%'"; } $where_sql = ''; // Prepare where part of the SQL if (!empty($whr)) { $where_sql = ' WHERE ' . implode(' OR ', $whr); } // Append to the original sql $search .= $where_sql;