按可能未设置的多个列在数据库 table 中搜索

search in database table by multiple column that maybe not set

我有一个包含任意列的数据库 table。 UI 页面中有 3 个表单输入,用户可以通过这些输入在 table 中搜索值。用户可以为其中一列(输入)、两列或所有列插入值。意味着其中一个或两个输入值可能为空,用户不会将它们用于他的搜索。 如何创建搜索查询?因为下面的代码有问题。如果用户没有插入所有 3 列的值,则此查询将出错。

$query="SELECT * FROM insurance WHERE nationalCode=:nationalCode AND insuranceNumber=:insuranceNumber 
AND insuranceType=:insuranceType;";

换句话说,我需要在 table 中搜索 3 列,如果 3 这些列的值由用户定义,否则如果用户有 2 列的插入值,搜索将通过这两列 &如果用户只有 1 个列的插入值,则搜索将按该 1 列执行。

如果用户没有插入值,例如 nationalCode,我假设您将 NULL(或空字符串?)作为 :nationalCode 传递,在这种情况下,您的条件应为:

nationalCode = :nationalCode OR :nationalCode IS NULL

或:

nationalCode = :nationalCode OR :nationalCode = ''

所以对于所有列,语句应该是:

SELECT * 
FROM insurance 
WHERE (nationalCode = :nationalCode OR :nationalCode IS NULL)  
  AND (insuranceNumber = :insuranceNumber OR :insuranceNumber IS NULL)   
  AND (insuranceType = :insuranceType OR :insuranceType IS NULL);

亲爱的@forpas 我已经使用了你的查询但没有成功。但是您提供的查询中的微小变化已经到达了我的黄金。 我使用了你的两个代码: 国家代码 = : 国家代码或 : 国家代码 = '' 和 nationalCode = :nationalCode 或 :nationalCode 为空 事实上,我将您建议的查询更改如下:

        $query="SELECT * FROM insurance WHERE 
    (nationalCode=:nationalCode OR :nationalCode IS NULL OR :nationalCode='') AND
    (insuranceNum=:insuranceNum OR :insuranceNum IS NULL OR :insuranceNum='') AND
    (insuranceType=:insuranceType OR :insuranceType IS NULL OR :insuranceType='');";

非常感谢您的帮助。