prevent error: Call to a member function prepare() on a non-object without global?
prevent error: Call to a member function prepare() on a non-object without global?
我正在尝试使用 PHP 实现对数据库的简单调用。
我收到以下错误 Call to a member function prepare() on a non-object
是 关于这个问题有很多问题,但对我的回答没有得到很好的解释,尤其是因为我不知道'一直想创建一个新的连接。
注册用户时我有 register.php 里面有标准的 $_GET 数据等,最后调用 insertUser($param ,$param,$param,$param) 在 db_functions.php
内
public function insertUser($name, $email, $gender, $dob, $password){
$hash = $this->hashSSHA($password);
$encryptedPassword = $hash["encrypted"];
$salt = $hash["salt"];
$statement = $this ->conn->prepare("INSERT INTO users(name, email, gender, dob, encrypted_password, salt, created_at) VALUES(?,?,?,?,?,?,NOW())");
$statement->bind_param("ssssss",$name,$email,$gender,$dob,$encryptedPassword,$salt);
$result = $statement->execute();
$statement->close();
if ($result) {
$statement = $this->conn->prepare("SELECT * FROM users WHERE email =?");
$statement->bind_param("s", $email);
$statement->execute();
$user = $statement->get_result()->fetch_assoc();
$statement->close();
return $user;
}else{
return false;
}
}
看了很多之后,我知道问题是因为 conn 没有在任何地方声明(是的,但是在 class 的顶部作为 private $conn;)
class
中还有一个构造
function construct(){
require_once 'db_connect.php';
$db = new db_connect();
$this->conn = $db->connect();
}
这只是调用 db_connect & connect()
function connect(){
require_once 'db_config.php';
$this -> conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);
return $this -> conn;
}
我以前在 PHP 中管理过数据传输,但那是我在每个 class 中建立连接的时候,没有专门用于功能的 class。
我读到将 $conn 声明为全局变量是一种糟糕的做法,因为它的编码风格很复杂,而且我还看到您可以将连接作为变量传递,但是我不明白我该怎么做从 register.php 到 db_functions 当构造在 db_functions
内时
如果有人可以提供好的 tutorials/explanations 或者我如何解决这个问题,我们将不胜感激。
如果您的构造方法前面没有 __
,您的构造方法将无法作为 'magic method' 使用。
改变;
function construct(){
require_once 'db_connect.php';
$db = new db_connect();
$this->conn = $db->connect();
}
至;
function __construct(){
require_once 'db_connect.php';
$db = new db_connect();
$this->conn = $db->connect();
}
我正在尝试使用 PHP 实现对数据库的简单调用。
我收到以下错误 Call to a member function prepare() on a non-object
是 关于这个问题有很多问题,但对我的回答没有得到很好的解释,尤其是因为我不知道'一直想创建一个新的连接。
注册用户时我有 register.php 里面有标准的 $_GET 数据等,最后调用 insertUser($param ,$param,$param,$param) 在 db_functions.php
内public function insertUser($name, $email, $gender, $dob, $password){
$hash = $this->hashSSHA($password);
$encryptedPassword = $hash["encrypted"];
$salt = $hash["salt"];
$statement = $this ->conn->prepare("INSERT INTO users(name, email, gender, dob, encrypted_password, salt, created_at) VALUES(?,?,?,?,?,?,NOW())");
$statement->bind_param("ssssss",$name,$email,$gender,$dob,$encryptedPassword,$salt);
$result = $statement->execute();
$statement->close();
if ($result) {
$statement = $this->conn->prepare("SELECT * FROM users WHERE email =?");
$statement->bind_param("s", $email);
$statement->execute();
$user = $statement->get_result()->fetch_assoc();
$statement->close();
return $user;
}else{
return false;
}
}
看了很多之后,我知道问题是因为 conn 没有在任何地方声明(是的,但是在 class 的顶部作为 private $conn;)
class
中还有一个构造 function construct(){
require_once 'db_connect.php';
$db = new db_connect();
$this->conn = $db->connect();
}
这只是调用 db_connect & connect()
function connect(){
require_once 'db_config.php';
$this -> conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);
return $this -> conn;
}
我以前在 PHP 中管理过数据传输,但那是我在每个 class 中建立连接的时候,没有专门用于功能的 class。
我读到将 $conn 声明为全局变量是一种糟糕的做法,因为它的编码风格很复杂,而且我还看到您可以将连接作为变量传递,但是我不明白我该怎么做从 register.php 到 db_functions 当构造在 db_functions
内时如果有人可以提供好的 tutorials/explanations 或者我如何解决这个问题,我们将不胜感激。
如果您的构造方法前面没有 __
,您的构造方法将无法作为 'magic method' 使用。
改变;
function construct(){
require_once 'db_connect.php';
$db = new db_connect();
$this->conn = $db->connect();
}
至;
function __construct(){
require_once 'db_connect.php';
$db = new db_connect();
$this->conn = $db->connect();
}