Я пытаюсь подключиться к базе данных (MySQLi) только один раз, но у меня возникают проблемы с этим.
Как создать глобальное соединение для всего скрипта? Существует несколько файлов (index.php, /classes/config.class.php, /classes/admin.class.php и т. Д.).
Я пробовал следующее:
В: config.class.php
public static $config = array(); public static $sql; function __construct() { // database db::$config['host'] = 'localhost'; db::$config['user'] = '_'; db::$config['pass'] = '_'; db::$config['db'] = '_'; // connect db::$sql = new mysqli(db::$config['host'], db::$config['user'], db::$config['pass'], db::$config['db']); }
Опять же, в config.class.php
public function contectToDatabase($sql){ $sql = new mysqli(db::$config['host'], db::$config['user'], db::$config['pass'], db::$config['db']); $this->sql = $sql; }
Я использую класс со следующим кодом: $config = new db();
Я действительно озадачен тем, как я должен это делать. Может ли кто-нибудь помочь?
— Редактировать — Это мой новый файл config.class.php:
public static $config = array(); public static $sql; private static $db; private $connection; public function __construct() { // database db::$config['host'] = '_'; db::$config['user'] = '_'; db::$config['pass'] = '_'; db::$config['db'] = '_'; // connect $this->connection = new mysqli(db::$config['host'], db::$config['user'], db::$config['pass'], db::$config['db']); } function __destruct() { $this->connection->close(); } public static function getConnection() { if($db == null){ $db = new db(); } return $db->connection; }
И вот как я загружаю его:
require_once("classes/config.class.php"); $config = new db(); $sql = db::getConnection();
Однако при запуске real_escape_string возникают следующие ошибки:
Warning: mysqli::real_escape_string() [mysqli.real-escape-string]: Couldn't fetch mysqli in /home/calico/_/_.com/_/index.php on line 20 Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in /home/calico/_/_.com/_/index.php on line 28
Лично я использую одноэлементный класс. Что-то вроде этого:
<?php class Database { private static $db; private $connection; private function __construct() { $this->connection = new MySQLi(/* credentials */); } function __destruct() { $this->connection->close(); } public static function getConnection() { if (self::$db == null) { self::$db = new Database(); } return self::$db->connection; } } ?>
Затем просто используйте $db = Database::getConnection();
где бы я ни нуждался.