gpt4 book ai didi

php - 如何通过 __construct 返回数据库连接以在 mysqli_* 中使用?

转载 作者:行者123 更新时间:2023-11-29 12:33:42 25 4
gpt4 key购买 nike

我的 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);
}
}

我的 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'];
}
}

但是当我尝试调用函数GetStateId()时,它给了我一个警告mysqli_query()期望参数1为mysqli,State.php中给出的null .

我还尝试了 $db->$con 而不是 State.php 中的 $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 有一个很好的观点,所以这里有一个解释。

当你调用 new State() 时,你基本上是在调用 __construct()。所以通过将$mysqli作为参数添加到__construct中,就可以通过参数传入了。您还可以通过在状态内使用 setMysqli 函数来完成此操作,并以这种方式传递它而不是在实例化时传递它,但这样您就知道您将始终拥有连接。

至于为什么mysqli_query需要$conn作为第一个参数。 mysqli_query() 只是包装了 mysqli::query(),所以当它请求 mysqli_query($conn, $sql) 时,它实际上只是执行 $conn->query($sql);在里面,所以你不妨跳过这一步,自己做。

当您学习 mysqli 时,请考虑您确实应该 binding your params为了安全。此外,您可以阅读我如何将 mysqli 存储为属性 here

关于php - 如何通过 __construct 返回数据库连接以在 mysqli_* 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27098240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com