我正在尝试以这种方式创建我的数据库连接。在Functions_BD中,我想创建与BD的连接并定义我的所有功能(Login,Insert,Selects ...)。我的班级看起来像这样:
class functions_BD {
private $mysqli;
function __construct() {
require_once 'config.php';
$mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE);
}
在'config.php'中我有我的数据库配置。然后我在“Functions_BD”中有一些公共函数,就像这个
public function login($user,$passw){
$mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE);
if (mysqli_connect_errno()) {
return 2;
}
$stmt=$mysqli->prepare("SELECT COUNT(*) FROM users WHERE user= ? AND passw= ? ");
$stmt->bind_param('ss', $user,$passw);
$stmt->execute();
$result = $stmt->fetch();
if($result>0){
return 1;
}else{
return 0;
}
}
如果我在每个函数中定义$ mysqli,代码工作正常,我的问题是:有没有任何方法只定义$ mysqli一次并在我的所有函数中使用它? (就像我在构造函数中尝试过的那样)或者每次进行查询时我都可以再次定义它?
答案 0 :(得分:1)
只需在属性中设置它......稍后在方法中使用,如果你在其他类中使用相同的连接,请尝试学习并使用依赖注入,以及工厂模式。
在你的ctor中,只需添加$this->mysqli = new mysqli( ... )
,然后在其他方法中使用它:$this->mysqli->prepare
...
你的代码看起来像这样:
<?php
class functions_BD
{
private $mysqli;
function __construct()
{
require_once 'config.php';
$this->mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE);
}
function login($user, $psw)
{
$stmt = $this->mysqli->prepare("SELECT COUNT(*) FROM users WHERE user= ? AND passw= ? ");
$stmt->bind_param('ss', $user,$passw);
$stmt->execute();
$result = $stmt->fetch();
return $result > 0;
}
}
答案 1 :(得分:0)
您可以使用以下单例模式:
class functions_BD {
private $mysqli;
private static $instance;
public static function get_instance() {
if (!isset(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE);
}
}
要使用数据库,您可以使用以下内容:
$db = functions_BD::get_instance();
将在您的所有代码中调用相同的实例。