我有一个具有以下形式的应用程序:
<form action="<?php echo base_url('registration/registrationSearch'); ?>" method="post">
<td widtd="40"> </td>
<td><input type="text" name="txt_apply_for" class="form-control" /></td>
<td><input type="text" name="txt_name" class="form-control" /></td>
<td><input type="text" name="txt_mobile" class="form-control" /></td>
<td><input type="text" name="txt_address" class="form-control" /></td>
<td><input type="text" name="txt_state" class="form-control" /></td>
<td><input type="text" name="txt_city" class="form-control" /></td>
<td><input type="text" name="txt_area" class="form-control" /></td>
<td><input type="text" name="txt_email" class="form-control" /></td>
<td><input type="text" name="txt_work_experience" class="form-control" /></td>
<td><input type="text" name="txt_pan" class="form-control" /></td>
<td><input type="text" name="txt_refrence" class="form-control" /></td>
<td><input type="text" name="txt_refrence_others" class="form-control" /></td>
<td><input type="text" name="txt_status" class="form-control" /></td>
<td><input type="text" name="txt_payment_others" class="form-control" /></td>
<td><input type="text" name="txt_application_date" class="form-control" /></td>
<td><input type="submit" name="sbt" class="form-control" value="search" /></td>
</form>
我注意到,例如,当我仅使用名称
提交它时,我没有得到任何结果。
当我搜索 name
和 mobile
时,也会发生同样的情况:没有返回结果。
我的搜索仅在搜索每个字段时才有效。
这是我搜索 name
和 mobile
时生成的查询:
SELECT *
FROM `application`
WHERE `apply_for` = ''
AND `full_name` = 'Ashish'
AND `mobile` = '1234567890'
AND `Mumbai` = ''
AND `Maharshtra` = ''
AND `Mumbai` = ''
AND `area` = ''
AND `email_id` = ''
AND `work_experinece` = ''
AND `pan` = ''
AND `refrence` = ''
AND `refrence_for_others` = ''
AND `approved` = ''
AND `payment_status` = ''
我做错了什么,我的搜索仅在每个字段都填满时才有效?
当表单上有未填写的字段时,如何正确搜索数据库?
P.S.:我在后端使用 PHP。
最佳答案
在 WHERE
子句中使用 AND
bool 运算符意味着必须满足所有这些条件才能返回记录。在您问题的示例中,它只会返回除 full_name
和 mobile
之外所有列均为空的记录。
选项 1:
在 PHP 代码中动态创建 WHERE
子句字符串。仅当表单的字段值不为空时,才将语句添加到 WHERE
子句。引用您问题中的示例,您的 sql 将如下所示。如果更多表单字段有值,只需将它们附加到 WHERE
子句中。
SELECT *
FROM `application`
WHERE `full_name` = 'Ashish'
AND `mobile` = '1234567890'
选项 2: 让您的 sql 检查空值。
SELECT *
FROM `application`
WHERE `mobile` = ifnull([your parameter value], `mobile`)
AND `full_name` = ifnull([your parameter value], `full_name`)
AND `mobile` = ifnull([your parameter value], `mobile`)
etc.
旁注:一定要使用参数化查询,否则很容易受到 SQL 注入(inject)攻击。请参阅 How can I prevent SQL injection in PHP? 了解强化代码的非常简单的方法。
关于mysql - 如何进行多列搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47562934/