在非对象上调用成员函数 bind_param()

2022-08-30 14:59:58

我试图在这个准备好的语句中绑定一个变量,但我不断收到错误:

Call to a member function bind_param() on a non-object

调用该函数,并将变量传递给它。当我将函数更改为仅回显变量时,变量在页面上打印得很好,但是如果我尝试在此处绑定它,则会收到错误。任何人都可以帮忙吗?

//CALL FROM PAGE ONE
check($username);

//FUNCTION ON PAGE 2
function check($username){
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
}

我知道这个函数没有完全写在这里,但这不应该是一个问题。我不明白为什么我会收到此错误。


答案 1

好吧,失败的一个原因是发送到它的sql语句在当前数据库中无效。prepare()

prepare()然后返回 false。

例如 - 如果表名不正确,或者查询中的一个或多个字段不存在


答案 2

正如错误消息所说,似乎不是一个对象。尝试在准备调用后立即使用来调试此项。还要检查是否返回您需要的内容。$qSelectvar_dump($qSelect);getDBH()

听起来像准备调用失败(不知道为什么),所以它返回 - 不是一个对象,所以你不能调用它。falsefalsebind_param()

编辑:你没有提供信息,但看起来你正在使用PHP的PDO。在这种情况下,请查看文档

如果数据库服务器成功准备了该语句,则 PDO::p repare() 将返回一个 PDOStatement 对象。如果数据库服务器无法成功准备语句,PDO::p repare() 将返回 FALSE 或发出 PDOException(取决于错误处理)。

应将服务器配置为返回这些 PDO 异常,这将告诉您准备调用失败的原因。


推荐