You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让searchUser函数在search参数为空时不返回数据?

解决searchUser函数空参数返回全量数据的问题

问题根源在于当$search为空字符串时,拼接后的%$search%会变成%%,而LIKE操作符中%%会匹配所有记录,导致返回数据库全部用户数据。下面提供两种可行的解决方式:

方法一:提前校验参数,直接返回空数组

在执行数据库查询前先检查搜索参数是否为空(使用trim过滤纯空格的情况),如果为空直接返回空数组,避免不必要的数据库请求:

public function searchUser(string $search): array
{
    if (trim($search) === '') {
        return [];
    }

    $sql = $this->pdo->prepare("SELECT user_id, first_name, last_name, avatar FROM user where first_name like :first_name or last_name like :last_name");
    $searchParam = "%$search%";
    $sql->bindParam(':first_name', $searchParam, PDO::PARAM_STR);
    $sql->bindParam(':last_name', $searchParam, PDO::PARAM_STR);
    $sql->execute();

    $result = [];
    while ($row = $sql->fetch()) {
        $result[] = new Search(
            $row['user_id'],
            $row['first_name'],
            $row['last_name'],
            $row['avatar']
        );
    }
    return $result;
}

方法二:修改SQL语句,增加参数非空条件

通过在WHERE子句中添加参数非空的判断,确保只有当搜索参数有效时才执行匹配逻辑:

public function searchUser(string $search): array
{
    $searchParam = "%$search%";
    $sql = $this->pdo->prepare("SELECT user_id, first_name, last_name, avatar FROM user 
        WHERE (:search != '' AND (first_name like :first_name or last_name like :last_name))");
    $sql->bindParam(':search', $search, PDO::PARAM_STR);
    $sql->bindParam(':first_name', $searchParam, PDO::PARAM_STR);
    $sql->bindParam(':last_name', $searchParam, PDO::PARAM_STR);
    $sql->execute();

    $result = [];
    while ($row = $sql->fetch()) {
        $result[] = new Search(
            $row['user_id'],
            $row['first_name'],
            $row['last_name'],
            $row['avatar']
        );
    }
    return $result;
}

推荐使用方法一,因为提前校验参数可以减少无效的数据库查询,提升接口性能,同时代码逻辑更直观。

内容的提问来源于stack exchange,提问作者netjav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:12:21