我有我的config.php文件,如下所示:
define ( 'DB_SERVER', 'localhost' );
define ( 'DB_USERNAME', 'admin' );
define ( 'DB_PASSWORD', 'password' );
define ( 'DB_DATABASE', 'database' );
class DB_Con {
function __construct() {
$con = mysqli_connect ( DB_SERVER, DB_USERNAME, DB_PASSWORD ) or die ( 'Connection error -> ' . mysqli_error ($con) );
mysqli_select_db ( $con, DB_DATABASE) or die ($con);
}
}
和我的国家.php像这样:
include_once 'config.php';
class State {
public function __construct() {
$db = new DB_con ();
}
public function GetStateId($statename) {
$result = mysqli_query ( $con, "SELECT State_Id FROM state_master WHERE State_Name='$statename'" ) or die ( mysqli_error ($con) );
$row = mysqli_fetch_assoc ( $result );
return $row ['State_Id'];
}
}
但是当我尝试调用一个函数GetStateId()
时,它会mysqli_query() expects parameter 1 to be mysqli, null given in State.php
给我一个警告。
我也尝试了$db->$con
而不是$con
State.php
但结果相同。
谁能告诉我如何在State.php
中引用原始$con
以用于mysqli_*
?我正在尝试从mysql_*
中移开.
class State {
private $_mysqli;
public function __construct($mysqli) {
$this->_mysqli = $mysqli;
}
public function GetStateId($statename) {
$result = $this->_mysqli->query("SELECT State_Id FROM state_master WHERE State_Name='$statename'" ) or die ( $this->_mysq );
$row = $this->_mysqli->fetch_assoc ( $result );
return $row ['State_Id'];
}
}
$mysqli = new mysqli('hostname', 'username', 'password', 'database');
$state = new State($mysqli);
或者我想你可以使用
$result = mysqli_query($this->_mysqli, "SELECT State_Id FROM state_master WHERE State_Name='$statename'");
但这不是好的做法
编辑:Siride有一个很好的观点,所以这里有一个解释。
当你调用 new State() 时,你基本上是在调用 __construct()。因此,通过将$mysqli作为参数添加到__construct,您可以通过参数将其传入。你也可以通过在状态中有一个setMysqli函数来完成它,并以这种方式而不是在实例化时传递它,但这样你就知道你将始终有一个连接。
至于为什么mysqli_query需要$conn作为第一个参数。 mysqli_query() 只是包裹着 mysqli::query(),所以当它请求 mysqli_query($conn, $sql) 时,它实际上只是执行 $conn->query($sql); 在内部,所以你不妨跳过步骤,自己动手。
当你在学习 mysqli 时,请考虑你真的应该绑定你的参数以确保安全。此外,您可以在此处阅读我如何将 mysqli 存储为属性的信息
修改后的配置.php
define ( 'DB_SERVER', 'localhost' );
define ( 'DB_USERNAME', 'admin' );
define ( 'DB_PASSWORD', 'password' );
define ( 'DB_DATABASE', 'database' );
class DB_Con {
private $con;
function __construct() {
global $con;
$con = mysqli_connect ( DB_SERVER, DB_USERNAME, DB_PASSWORD ) or die ( 'Connection error -> ' . mysqli_error ($con) );
mysqli_select_db ( $con, DB_DATABASE) or die ($con);
}
public function getConnection()
{
global $con;
return $con;
}
}
修改状态.php
include 'config.php';
class State extends DB_Con{
public function __construct() {
$db = new DB_con ();
}
public function GetStateId($statename) {
$con= $this->getConnection();
$result = mysqli_query ( $con, "SELECT State_Id FROM state_master WHERE State_Name='$statename'" ) or die ( mysqli_error ($con) );
$row = mysqli_fetch_assoc ( $result );
$row ['State_Id'];
}
}
上面的代码将起作用。我给你看另一种方式。这是整洁的代码,您可以轻松理解。
修改后的配置.php
define ( 'DB_SERVER', 'localhost' );
define ( 'DB_USERNAME', 'admin' );
define ( 'DB_PASSWORD', 'password' );
define ( 'DB_DATABASE', 'database' );
class DB_Con {
private $con;
function __construct() {
$this->con = mysqli_connect ( DB_SERVER, DB_USERNAME, DB_PASSWORD ) or die ( 'Connection error -> ' . mysqli_error ($con) );
mysqli_select_db ($this->con, DB_DATABASE) or die ($con);
}
public function getConnection()
{
return $this->con;
}
}
修改状态.php
include 'config.php';
class State {
private $db;
public function __construct() {
$this->db = new DB_con ();
}
public function GetStateId($statename) {
$con= $this->db->getConnection();
$result = mysqli_query ( $con, "SELECT State_Id FROM state_master WHERE State_Name='$statename'" ) or die ( mysqli_error ($con) );
$row = mysqli_fetch_assoc ( $result );
$row ['State_Id'];
}
}