如果我正在创建一个类,并且我需要在类的不同函数中查询MySQL,有没有办法只需要一次conn.php文件来用于所有函数?
到目前为止,我在每个函数中都需要一个连接文件,但是在整个类中多次要求连接似乎是非常昂贵的。
...编辑......那么这样吗?
private $conn;
function __construct() {
$this->conn = new mysqli("", "", "", "");
}
function insert() {
$sql = "";
$query = $this->conn->prepare($sql);
$query->bind_param();
$query->execute();
$query->free_result();
$query->close();
}
function update() {
$sql = "";
$query = $this->conn->prepare($sql);
$query->bind_param();
$query->execute();
$query->free_result();
$query->close();
}
这非常有效。这有什么缺点吗?有更专业的方法吗?
答案 0 :(得分:2)
您可以在类的构造函数中设置与MySQL的连接,并将连接分配给成员变量,如下所示:
private $oConnection = null;
public function __construct() {
$this->oConnection = mysqli_connect("12.34.56.789", "db_username", "db_password");
}
然后,您可以在该类的任何其他函数中使用该成员变量。例如:
public getDataResult() {
$sSql = 'select * from my_table limit 10';
$oResult = @mysqli_query($this->oConnection, $sSql);
return $oResult;
}
答案 1 :(得分:0)
在代码中尝试stay away from using global variables,尤其是当它们引用您不希望整个程序访问的潜在危险值时,尤其是数据库连接时。
也就是说,你可以像@mynx建议的那样使用一个简单的数据库类来解决这个问题,或者使用dependency injection并将数据库变量作为参数传递给你的各个函数,如果你想要进行程序化的话做法。任何方法(面向对象或程序)都可以帮助您更轻松地管理代码,而不是声明全局变量,如果您不小心,可能会导致整个代码混乱。
由于您似乎正朝着面向对象的方向发展,因此您可以将@mynx的答案与将实例化的数据库类作为依赖项传递给可能需要访问数据库的其他类的想法相结合,这是一种很好的方法。创建可维护和可调试的代码。
答案 2 :(得分:0)
试试这个
class mydb{
private $true = false;
function __construct($host,$dbname,$user,$password){
$this->true = mysqli_connect($host,$buser,$password,$dbname);
}
function queries($query){
if($this->true){
if(preg_match('/(UPDATE|DELETE FROM|INSERT INTO|DROP TABLE|CREATE TABLE|ALTER TABLE)/',$query)){
if($rv = mysqli_query($this->true,$query))
return true;
}elseif(preg_match('/(update|delete from|insert into|drop table|create table|alter table)/',$query)){
if($rv = mysqli_query($this->true,$query))
return true;
}else{
if($results = mysqli_query($this->true,$query)){
$result = array();
while($obj = mysqli_fetch_object($results))
$result[] = $obj;
return $result;
}
}
}
}
$mydb = new mydb($database_host,$database_name,$database_user,$database_password);
call the query
$result = $mydb->queries($sql);
在其他函数中将$ mybd设为全局 示例
function ,,,,,,.....(){
global $mydb;
}
答案 3 :(得分:-1)
如果您的数据库连接存在于全局范围内,那么您只需要在每个函数中将其声明为全局。
$db = mysqli_connect(...);
function getData(){
global $db;
$sql = 'SELECT * FROM table';
$result = mysqli_query($db, $sql);
return $result;
}
如果你的函数都是基于类的,正如你提到'__construct()'那听起来就像它们那样,那么@mynx的答案就是你的解决方案。