当前位置: 首页 > 面试题库 >

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

赫连琦
2023-03-14
问题内容

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

   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。我需要使用通配符的原因是因为列的数据包含序列化的数组。我想,如果有一种更简单的方法来处理此问题,该怎么办?

提前致谢!


问题答案:

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

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


 类似资料:
  • 问题内容: 我正在使用准备好的语句来执行mysql数据库查询。我想实现基于各种关键字的搜索功能。 为此,我需要使用关键字,我知道很多。而且我之前也使用过预处理语句,但是我不知道如何使用它,因为从以下代码中,我将在哪里添加? 我可以直接在as 或类似的东西中使用它吗?我在网络上看到很多帖子,但是在任何地方都没有好的答案。 问题答案: 您需要在值本身中而不是在准备好的语句SQL字符串中进行设置。 因此

  • 问题内容: 我正在使用准备好的语句来执行mysql数据库查询。我想实现基于各种关键字的搜索功能。 为此,我需要使用关键字,这一点我知道很多。而且我之前也使用过预处理语句,但是我不知道如何使用它,因为从以下代码中,我将在哪里添加? 我可以直接在或类似的东西中使用它吗?我在网络上看到很多帖子,但在任何地方都没有好的答案。 问题答案: 你需要在值本身中而不是在准备好的语句SQL字符串中进行设置。 因此,

  • 问题内容: 我要执行以下mysql查询: 我尝试了一下但没有成功: 因此,我问您是否可以在准备好的语句中使用%通配符。 /编辑 谢谢。其与: 问题答案: 它也可以通过以下方式与绑定参数一起使用:

  • 问题内容: 在mysqli准备好的语句中,NULL变成’‘(对于字符串)或0(对于整数)。我想将其存储为真正的NULL。有什么办法吗? 问题答案: 我知道这是一个旧线程,但是可以将真实的NULL值绑定到准备好的语句(请阅读this)。 实际上,您可以使用mysqli_bind_parameter将NULL值传递给数据库。只需创建一个变量并将NULL值(请参见手册页)存储到该变量并将其绑定即可。无论

  • 我有以下准备的一个准备好的声明失败了... 我在我的第一份准备好的声明中几乎有同样的准备,而且它进行得很好。我不确定是否我有两个准备好的声明,如果这是造成一个问题,或情况可能是什么? 现在我有个错误... 更新-可能的内部连接,像这样?