[英]Fatal error: Call to a member function query() PHP CLASS
我正在嘗試編寫此類來連接和查詢數據庫,但出現此錯誤:
致命錯誤:在第24行的C:\\ xxxxxx \\ xxxx \\ xxxxx \\ xxxxxxx \\ pages \\ config \\ class.php中,調用成員函數query()上的null
郵遞區號:
<?php
class Db{
private static $db_host = "localhost";
private static $db_user = "root";
private static $db_pass = "";
private static $db_name = "sivi";
public $connection;
public function db_connect() {
$connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection));
echo "Conexión realizada". "<br>";
}
public function db_query($query){
$connection = $this->db_connect();
var_dump($query);
$result = $connection->query($query);
while($row = mysqli_fetch_array($result)) {
echo $row["COD_PRE"] . "<br>";
}
}
}
$con = new Db();
$con->db_query('SELECT `COD_PRE`, `CODE` FROM `test` WHERE `CODE` = 457 AND CONFIN = 1');
?>
您的方法:
public function db_connect() {
$connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection));
echo "Conexión realizada". "<br>";
}
不會從方法中重新調整$connection
,因此rest方法調用失敗:
public function db_connect() {
$connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection));
echo "Conexión realizada". "<br>";
return $connection; // return the $connection object
}
如前所述,您的代碼效率不高,因為對於每個執行的查詢,代碼都(重新)連接到數據庫。 這不必要地昂貴/低效。
有很多方法可以解決此問題。
例如
class Db{
private static $db_host = "localhost";
private static $db_user = "root";
private static $db_pass = "";
private static $db_name = "sivi";
public $connection;
public function __construct()
{
$this->connection = $this->db_connect();
}
public function db_connect() {
$connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection));
echo "Conexión realizada". "<br>";
return $connection;
}
}
例如
class Db{
private static $db_host = "localhost";
private static $db_user = "root";
private static $db_pass = "";
private static $db_name = "sivi";
public $connection = null;
public function __construct()
{
}
public function db_connect() {
$connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection));
echo "Conexión realizada". "<br>";
return $connection;
}
public function db_query($query){
if ( null ==== $this->connection ) $this->connection = $this->db_connect();
var_dump($query);
$result = $this->connection->query($query);
while($row = mysqli_fetch_array($result)) {
echo $row["COD_PRE"] . "<br>";
}
}
}
您必須使用$this
來訪問自己的類的屬性。
$this->connection = ....
$result = $this->connection->...
如果使用構造函數來啟動連接會更好,當前每次使用查詢方法時,您都將打開一個新的數據庫連接。
編輯:您的班級可能看起來像這樣
<?php
class Db {
private $db_host = "localhost";
private $db_user = "root";
private $db_pass = "";
private $db_name = "sivi";
private $connection;
public function __construct() {
$this->connection = mysqli_connect($this->db_host, $this->db_user, $this->db_pass, $this->db_name)
or die("Error " . mysqli_error($this->connection));
}
public function db_query($query) {
var_dump($query);
$result = $this->connection->query($query);
while ($row = mysqli_fetch_array($result)) {
echo $row["COD_PRE"] . "<br>";
}
}
}
$con = new Db();
$con->db_query('SELECT `COD_PRE`, `CODE` FROM `test` WHERE `CODE` = 457 AND CONFIN = 1');
?>
我認為不需要將屬性設為靜態,因此也更改了它們。
我認為db_query方法太不靈活,因為它直接輸出結果。 我將使用fetch_all將整個結果集作為數組返回。 這樣,您可以自由選擇要如何處理結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.