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 do
    var\u dump($mysqli)
    。结果如何?以h2o的形式said@h2ooooooo正确!你刚刚让我走上了正确的道路!为什么它返回null?我尝试了一个类外的连接,它工作(因此我知道连接工作)@KarlMorrison你在使用什么类?但它没有
    connect
    方法?你在构造函数(
    new mysqli)中指定它(…选项…
    )。我可以想象这可能有点问题(特别是兼容性和可移植性)
    $mysqli = new mysqli('localhost', 'db_user', 'db_password', 'the_database');