为什么在显示搜索结果时“如果为空”不起作用

时间:2017-09-09 03:39:06

标签: php mysql pdo

我正在创建一个搜索引擎,以便从MySQL中检索一些数据。

我不知道为什么当我将该字段留空时,它仍显示数据库表的所有内容

任何猜测?

谢谢,对于凌乱的代码感到抱歉。

以下是代码:https://codeshare.io/Gbr9W6

2 个答案:

答案 0 :(得分:1)

如果$firstname为空,则SQL查询变为:

SELECT * 
FROM users
WHERE firstname LIKE '%%'

%是一个通配符,所以它匹配所有内容。如果您不想这样,则需要在执行查询之前检查$firstname是否为空。

答案 1 :(得分:1)

当你想要找到类似的东西而不是找到确切的东西时,使用

LIKE子句而不是where子句。例如:

如果你想找到名字Ray

SELECT first_name from users WHERE firstname = "Ray";

如果要查找包含光线的名字,

SELECT first_name from users WHERE firstname LIKE "%ray%";


现在,在您的情况下,由于firstname为空,查询变为

SELECT * FROM users WHERE firstname LIKE '%%'

所以它匹配所有内容并返回所有值。

代码更正:
因此,如果您不希望在第一个名称为空时检索所有值,则可以对代码执行以下操作

if(!empty($firstname))
{
    $firstname = "%".$firstname."%";
}

并将此代码更改为

$statement->execute(array(
    ':firstname' => $firstname
));

当提交的名字为空

时,这不会获取任何结果
  

LIKE子句在没有'%'

的情况下使用时等于WHERE子句

祝你好运!!!