警告:mysqli_query() 期望参数 1 为 mysqli,[class 文件] 中给出的对象
Warning: mysqli_query() expects parameter 1 to be mysqli, object given in [class file]
我正在学习 OOP,所以我可能做了一些愚蠢的事情。我有使用 mysql 的代码,但读到 mysqli 更好,特别是因为我想从数据库中获取对象数组。我已经更新我的代码以尝试使用 mysqli 现在,并解决了一些问题,但现在我被卡住了。
来自我的数据库class 文件:
class Database {
function __construct() {
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE) or die(mysqli_error($db));
?><pre><?
var_dump($connection);
?></pre><?
}
}
转储包含一些变量,我不会在这里粘贴,但前几行:
object(mysqli)#3 (19) {
["affected_rows"]=>
int(0)
["client_info"]=>
string(6) "5.5.40"
["client_version"]=>
int(50540)
["connect_errno"]=>
int(0)
["connect_error"]=>
NULL
我相信这意味着我已成功连接到数据库。
这是我的会员 class 文件:
<?php
include_once (inc('_class.db'));
class Member {
//Database connect
public function __construct() {
$db = new Database();
}
/*snip a registration function */
// Login process
public function check_login($emailusername, $password) {
$db = new Database(); # added for troubleshooting, seems to do nothing...
var_dump($db);
$password = md5($password);
$result = mysqli_query($db,"SELECT * from members WHERE email = '$emailusername' or username='$emailusername' and password = '$password'") or die(mysqli_error($db));
$user_data = mysqli_fetch_array($result,MYSQLI_ASSOC);
$no_rows = mysqli_num_rows($result);
/* snip code that runs after that */
}
?>
var_dump 产生以下结果:
object(Database)#2 (0) { }
同样,这段代码在我使用 mysql 语句时都有效,但转换为 mysql 我很烦。
我读过几个 Stack Overflow 的答案是这个错误 - "object given" - 还有几十个不适用的 "string given" 之类的答案。我不知道我做错了什么。
据我所知,这不是一个重复的问题,尽管像这样的问题经常被问到。
我不会尝试 return 构造函数中的任何内容。为什么不调用一个单独的函数来获取连接?
class Database {
function __construct() {}
function getConnection(){
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
return $connection;
}
}
然后实例化后从Database对象中获取连接:
$result = mysqli_query($db->getConnection(),"SELECT * from members WHERE email = '$emailusername' or username='$emailusername' and password = '$password'") or die(mysqli_error($db));
您不能将自定义 Database
class 的实例传递给 mysqli_query
。它需要一个特定的连接,而不是您定义的任意 class 的实例。
您需要将 $connection
转换为 mysqli_query
,最简单的方法可能是为 mysqli_query
添加一个包装器到您的自定义 class:
class Database {
private $connection;
function __construct() {
$this->connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE) or die(mysqli_error($db));
}
function query($query_string) {
return mysqli_query($this->connection, $query_string);
}
}
我正在学习 OOP,所以我可能做了一些愚蠢的事情。我有使用 mysql 的代码,但读到 mysqli 更好,特别是因为我想从数据库中获取对象数组。我已经更新我的代码以尝试使用 mysqli 现在,并解决了一些问题,但现在我被卡住了。
来自我的数据库class 文件:
class Database {
function __construct() {
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE) or die(mysqli_error($db));
?><pre><?
var_dump($connection);
?></pre><?
}
}
转储包含一些变量,我不会在这里粘贴,但前几行:
object(mysqli)#3 (19) {
["affected_rows"]=>
int(0)
["client_info"]=>
string(6) "5.5.40"
["client_version"]=>
int(50540)
["connect_errno"]=>
int(0)
["connect_error"]=>
NULL
我相信这意味着我已成功连接到数据库。
这是我的会员 class 文件:
<?php
include_once (inc('_class.db'));
class Member {
//Database connect
public function __construct() {
$db = new Database();
}
/*snip a registration function */
// Login process
public function check_login($emailusername, $password) {
$db = new Database(); # added for troubleshooting, seems to do nothing...
var_dump($db);
$password = md5($password);
$result = mysqli_query($db,"SELECT * from members WHERE email = '$emailusername' or username='$emailusername' and password = '$password'") or die(mysqli_error($db));
$user_data = mysqli_fetch_array($result,MYSQLI_ASSOC);
$no_rows = mysqli_num_rows($result);
/* snip code that runs after that */
}
?>
var_dump 产生以下结果:
object(Database)#2 (0) { }
同样,这段代码在我使用 mysql 语句时都有效,但转换为 mysql 我很烦。
我读过几个 Stack Overflow 的答案是这个错误 - "object given" - 还有几十个不适用的 "string given" 之类的答案。我不知道我做错了什么。
据我所知,这不是一个重复的问题,尽管像这样的问题经常被问到。
我不会尝试 return 构造函数中的任何内容。为什么不调用一个单独的函数来获取连接?
class Database {
function __construct() {}
function getConnection(){
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
return $connection;
}
}
然后实例化后从Database对象中获取连接:
$result = mysqli_query($db->getConnection(),"SELECT * from members WHERE email = '$emailusername' or username='$emailusername' and password = '$password'") or die(mysqli_error($db));
您不能将自定义 Database
class 的实例传递给 mysqli_query
。它需要一个特定的连接,而不是您定义的任意 class 的实例。
您需要将 $connection
转换为 mysqli_query
,最简单的方法可能是为 mysqli_query
添加一个包装器到您的自定义 class:
class Database {
private $connection;
function __construct() {
$this->connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE) or die(mysqli_error($db));
}
function query($query_string) {
return mysqli_query($this->connection, $query_string);
}
}