Php 如何通过要在mysqli中使用的u构造返回数据库连接?
我的config.php文件如下所示:Php 如何通过要在mysqli中使用的u构造返回数据库连接?,php,mysql,database,mysqli,database-administration,Php,Mysql,Database,Mysqli,Database Administration,我的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_SER
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);
}
}
我的State.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'];
}
}
但是当我尝试调用函数时,它会给我一个警告mysqli\u query()希望参数1是mysqli,State.php中给出的是null
我还在State.php
中尝试了$db->$con
而不是$con
,但结果相同
有谁能告诉我如何在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有一个很好的观点,所以这里有一个解释
当您调用newstate()时,您基本上是在调用_construct()。因此,通过将$mysqli作为参数添加到_构造中,您可以通过参数传入它。您也可以通过在state中使用setMysqli函数来完成,并以这种方式传递它,而不是在实例化时传递,但这样您就知道您将始终拥有一个连接
至于为什么mysqli_查询需要$conn作为第一个参数。mysqli_query()只是围绕mysqli::query()展开,所以当它请求mysqli_query($conn,$sql)时,它实际上只是执行$conn->query($sql);在内部,所以你可以跳过这一步,自己做
当你在学习MyQuLi时,考虑一下你确实应该是安全的。此外,您还可以了解我是如何将mysqli存储为属性的Modified config.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;
}
}
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;
}
}
修改的state.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'];
}
}
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'];
}
}
以上代码将起作用。我会告诉你另一条路。这是一个整洁的代码,你可以很容易地理解
修改的config.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;
}
}
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;
}
}
修改的state.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'];
}
}
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'];
}
}
您正在创建一个DB\u con
实例,然后将其扔掉,然后将其$DB
句柄扔掉。在这两种情况下,您都需要将其分配给属性$this->con
不过,整个DB_con
类包装是毫无意义的;只是让它成为一个函数。请添加解释,而不仅仅是一个代码转储。如果你那样做的话,我将取消我的反对票。我对你的答案有点困惑。我看到您在创建状态对象时传递了params。这是否意味着每次创建状态对象时都必须传递参数?如果是的话,那么config呢?是的,这意味着每次创建State时都必须传入mysqli对象。但是,您不必传入配置。如果您看看这个示例,您要做的是在创建状态之前在mysqli对象内部设置配置,然后传入对象本身,这样对象就已经有状态了。这也意味着您在页面上只创建了一个连接,而不是每个州都创建一个连接。请解释一下。谢谢@m3huL-添加了额外的代码,从中您可以轻松understand@m3huL-(仍在思考)谁倒下了(说出了答案:):)读第一个答案的评论@m3huL-我希望您能够理解第二段代码,无需解释:)