mysql - 如何进行多列搜索?

标签 mysql sql

我有一个具有以下形式的应用程序:

<form action="<?php echo base_url('registration/registrationSearch'); ?>" method="post">
    <td widtd="40">&nbsp;</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>

enter image description here

我注意到,例如,当我仅使用名称提交它时,我没有得到任何结果。
当我搜索 namemobile 时,也会发生同样的情况:没有返回结果。
我的搜索仅在搜索每个字段时才有效。

这是我搜索 namemobile 时生成的查询:

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_namemobile 之外所有列均为空的记录。

选项 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/

相关文章:

java - 如何在 Java 中将选定的列从数据库获取到 JTable

mysql - 在 MySQL 中查找具有多个引用值的行

MySQL连接两张表过滤数据

mysql - 在Mysql中连接四个没有重复的右表表?

mysql - 多对多选择: missing data

MySQL查询帮助。 (从哪里删)

mysql - 数据库外键错误

PHP - 提交后保存选择选项值

android - ActiveAndroid schema迁移DB版本,版本可以分批递增吗?

sql - 存储过程中的 IF/ELSE 性能