我有2个类,控制器和连接器。它们由delete.php使用。我收到错误说
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\pracownia\kontroler.php on line 38
Warning: mysqli_error() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\pracownia\kontroler.php on line 44
有没有人知道我犯了错误?对我来说,连接的链接看起来很糟糕地传递给某个地方的控制器类。或者回报不能按我的意愿运作。 在我不得不把它变成课堂之前,这一切都做了......
类连接器在这里:
<?php
class connector {
private $db_handle="";
private $user_name;
private $password;
private $database;
public static $server = "127.0.0.1";
function __construct($user_name="", $password="", $database="")
{
$this->user_name = $user_name;
$this->password = $password;
$this->database = $database;
}
function connect()
{
$this->db_handle = mysqli_connect(self::$server,$this->user_name,$this->password);
if(!$this->db_handle)
{
die('Could not connect: ' . mysqli_error());
}
mysqli_select_db($this->db_handle,$this->database);
return $this->db_handle;
}
function disconnect()
{
mysqli_close($this->db_handle);
}
}
?>
类控制器就在这里
<?php
class kontroler {
private $db_handle;
private $name;
private $surname;
private $password;
private $email;
private $id;
private $sql;
function _construct($db_handle="")
{
$this->db_handle = $db_handle;
}
function delete_user($id="")
{
//$this->sql = "DELETE FROM UZYTKOWNICY WHERE ID_UZ=$id";
if(mysqli_query($this->db_handle,"DELETE FROM UZYTKOWNICY WHERE ID_UZ=$id"))
{
echo "Record deleted successfully";
}
else
{
die ('Error deleting record: ' . mysqli_error($this->db_handle));
}
}
}
?>
和delete.php:
<?php
global $db_handle;
include 'kontroler.php';
include 'connector.php';
//require_once('kontroler.php');
//require_once('connector.php');
$connection = new connector("root","","proj");
$db_handle = $connection->connect();
$kontrol = new kontroler($db_handle);
$kontrol->delete_user('$_POST[id]');
$connection->disconnect();
?>
答案 0 :(得分:2)
这是一个非常简短的答案,但我希望这会有所帮助。假设您的连接类位于&#39; connection.php&#39;,
class connector {
private $db_handle; //db handles are not strings. Unsure why you were setting this to a string by default.
private $user_name;
private $password;
private $database;
public static $server = "127.0.0.1";
//I'd recommend against this, unless you know 100% that your live server will use 'localhost'
function __construct($user_name="", $password="", $database="")
{
$this->user_name = $user_name;
$this->password = $password;
$this->database = $database;
//There really isn't a need to not have your connector here - but that's me being lazy.
$this->db_handle = mysqli_connect(self::$server,$this->user_name, $this->password, $this->database);
}
function query($sql){
//Do some checks, or if you use prepared statements, accept the prepared data array and parse it here.
return mysqli_query($this->db_handle, $sql);
}
function __destruct()
{
mysqli_close($this->db_handle);
}
}
然后,在您的页面中,执行以下操作:
include 'connector.php';
$db = new connector('user','pw','some_db');
$query = $db->query('DELETE FROM table WHERE user_id='.$_POST['something']);
//FOR THE LOVE OF GOD, DO NOT ACTUALLY DO THIS. I DID IT ONLY FOR THE SAKE OF BREVITY. USING RAW DATA SUBMITTED FROM THE USER
// IS DANGEROUS AND LEADS TO SQL INJECTIONS. *ALWAYS* SANITIZE YOUR DATA.
原因是在mysqli_connect
和mysqli_close
方法中添加__construct
和__destruct
调用是因为我非常懒惰而且不想打电话给->connect()
方法。说实话,我的懒惰有时为我节省了很多工作,因为我不想一遍又一遍地重复自己(发现这是一种叫做DRY的编码哲学 - 不要重复自己)。希望这会有所帮助。