一尘不染

在准备好的语句中使用通配符-MySQLi

php

我正在尝试运行以下查询,但通配符出现问题。

   function getStudents() {
        global $db;
        $users = array();
        $query = $db->prepare("SELECT id, adminRights FROM users WHERE classes LIKE ? && adminRights='student'");
        $query->bind_param('s', '%' . $this->className . '%');
        $query->execute();
        $query->bind_result($uid, $adminRights);
        while ($query->fetch()) {
            if (isset($adminRights[$this->className]) && $adminRights[$this->className] == 'student')
                $users[] = $uid;
        }
        $query->close();
        return $users;
    }

我收到一条错误消息,指出:无法通过引用传递参数2。我需要使用通配符的原因是因为列的数据包含序列化的数组。我想,如果有一种更简单的方法来处理此问题,该怎么办?

提前致谢!


阅读 255

收藏
2020-05-29

共1个答案

一尘不染

您必须bind_param()通过引用传递参数,这意味着您必须传递 单个变量
(而不是串联字符串)。不过,没有理由您不能专门构造这样的变量来传递:

$className = '%' . $this->className . '%';
$query->bind_param('s', $className);
2020-05-29