PHP:对中的非对象调用成员函数prepare()
我收到以下错误消息:PHP:对中的非对象调用成员函数prepare(),php,Php,我收到以下错误消息:致命错误:对中的非对象调用成员函数prepare() 守则: $obj = new MySQLi(); $mysqli = $obj->connect(); /* Create a prepared statement */ if($stmt = $mysqli -> prepare(...)) { <--- error line ....more code } class MySQLi { public $mysqli; pu
致命错误:对中的非对象调用成员函数prepare()
守则:
$obj = new MySQLi();
$mysqli = $obj->connect();
/* Create a prepared statement */
if($stmt = $mysqli -> prepare(...)) { <--- error line
....more code
}
class MySQLi {
public $mysqli;
public function connect() {
$this->mysqli = new mysqli('localhost', 'root', '', 'icu');
if(mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
exit();
}
mysqli_set_charset($this->mysqli, "utf8");
return $this->mysqli;
}
public function con_close(){
mysqli_close($con);
}
}
$obj=newmysqli();
$mysqli=$obj->connect();
/*创建准备好的语句*/
如果($stmt=$mysqli->prepare(…){mysqli=newmysqli('localhost','root','icu');
if(mysqli\u connect\u errno()){
echo“连接失败:”.mysqli_connect_errno();
退出();
}
mysqli_set_字符集($this->mysqli,“utf8”);
返回$this->mysqli;
}
公共功能con_close(){
mysqli_close($con);
}
}
您需要一个mysqli实例:
$mysqli = new mysqli('localhost', 'root', '', 'icu');
这里有空格->
:
if($stmt = $mysqli -> prepare(...))....
将其更改为:
if($stmt = $mysqli->prepare(...))...
该类没有->connect()
方法,您可能使用了重复的类名,这从来都不是一个好主意(这也是您得到NULL
且无法调用prepare
方法的原因)
在MySQLi类中,您可以在以下位置启动连接:
已修复但不幸的是,相同的错误仍然存在:($obj->connect
不返回mysqli
对象(很可能是由于连接失败)。var\u dump($mysqli)
会告诉你这一点。@vascowhite这些线程没有帮助我,我已经四处查看了。@KarlMorrison dovar\u dump($mysqli)
。结果如何?以h2o的形式said@h2ooooooo正确!你刚刚让我走上了正确的道路!为什么它返回null?我尝试了一个类外的连接,它工作(因此我知道连接工作)@KarlMorrison你在使用什么类?但它没有connect
方法?你在构造函数(new mysqli)中指定它(…选项…
)。我可以想象这可能有点问题(特别是兼容性和可移植性)
$mysqli = new mysqli('localhost', 'db_user', 'db_password', 'the_database');