mcb*_*eav 27 php mysqli prepared-statement
我试图在这个准备好的语句中绑定一个变量,但我一直收到错误:
Call to a member function bind_param() on a non-object
Run Code Online (Sandbox Code Playgroud)
调用该函数,并将变量传递给它.当我将函数更改为仅回显变量时,变量在页面上打印正常,但如果我尝试在此处绑定它,则会收到错误.有人可以帮忙吗?
//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);
}
Run Code Online (Sandbox Code Playgroud)
我知道这里没有完全写出这个功能,但这应该不是问题.我不明白为什么我收到这个错误.
小智 69
好吧,一个原因prepare()
可能是失败的,如果发送给它的sql语句在当前数据库中无效.
prepare()
然后将返回false.
例如 - 如果表名不正确或查询中的一个或多个字段不存在.
oez*_*ezi 24
正如错误信息所说,$qSelect
似乎不是一个对象.尝试var_dump($qSelect);
在准备通话后立即使用调试.还要检查是否getDBH()
返回你需要的东西.
听起来像准备调用失败(不知道为什么),所以它返回false
- false
不是一个对象,所以你不能调用bind_param()
它.
编辑:你没有给出信息,但看起来你正在使用PHP的PDO.在这种情况下,请查看文档.
如果数据库服务器成功准备语句,PDO :: prepare()将返回PDOStatement对象.如果数据库服务器无法成功准备语句,PDO :: prepare()将返回FALSE或发出PDOException(取决于错误处理).
您应该将服务器配置为返回那些PDO-Exceptions,这将告诉您为什么prepare调用失败.
小智 17
我正在使用mysqli方法,并在关闭第一个实例之前创建另一个mysqli实例时遇到了同样的错误.因此close()
在开始使用同一段代码之前使用它很重要.例如:
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
$qSelect->close(); // <--- use close before calling the same function( wich contains $DBH code) again;
Run Code Online (Sandbox Code Playgroud)