Я создаю php restful API, и в настоящее время у меня есть информация о соединении с базой данных в каждой функции.
//Connect To Database $hostname=host; $username=username; $password=password; $dbname=dbname; mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.'); mysql_select_db($dbname); mysql_query($sqlApiAccess) or die('Error, insert query failed');
Каков наилучший способ сделать это? Могу ли я иметь одно соединение с базой данных для каждого php-файла? Или мне нужно сделать это для каждой функции, которая использует базу данных.
Создайте config.php И добавьте код:
config.php:
$hostname=host; $username=username; $password=password; $dbname=dbname; mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.'); mysql_select_db($dbname);
Затем в любом файле, который вы хотите использовать mysql, добавьте следующее:
script2.php
<?php require_once 'config.php'; mysql_query($sqlApiAccess) or die('Error, insert query failed'); ?>
Чтобы избежать создания нового подключения к базе данных каждый раз, мы можем использовать шаблон проектирования Singleton –
мы должны иметь класс базы данных для обработки соединения с БД –
Database.class.php
<?php class Database { // Store the single instance of Database private static $m_pInstance; private $db_host='localhost'; private $db_user = 'root'; private $db_pass = ''; private $db_name = 'databasename'; // Private constructor to limit object instantiation to within the class private function __construct() { mysql_connect($this->db_host,$this->db_user,$this->db_pass); mysql_select_db($this->db_name); } // Getter method for creating/returning the single instance of this class public static function getInstance() { if (!self::$m_pInstance) { self::$m_pInstance = new Database(); } return self::$m_pInstance; } public function query($query) { return mysql_query($query); } } ?>
& мы можем назвать это из других файлов –
other.php
<?php include 'singleton.php'; $pDatabase = Database::getInstance(); $result = $pDatabase->query('...'); ?>
Нет необходимости устанавливать соединение в каждой функции. вам необходимо создать файл соединения, например conn.php
и создать запросы на подключение.
<?php mysql_connect("localhost", "admin", "1admin") or die(mysql_error()); mysql_select_db("test") or die(mysql_error()); ?>
в любом другом файле, где вы хотите подключиться к базе данных, просто напишите эту строку
<?php include("conn.php");?>
В этом файле вы можете запускать любой запрос.
сделай это:
$db_connection= mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.');
И каждый раз, когда вы хотите запросить:
mysql_query("my_query",$db_connection);
Обратите внимание: если вы подключитесь к БД в функции, вам понадобится глобальное $db_connection
.
И когда вы хотите закрыть соединение с БД:
mysql_close($db_connection);
Почему вы не можете переместить информацию о соединении в конфигурацию и вызов mysql_connect
на какой-то завод?
Например
class ConnectionFactory { public static MysqlConnection CreateConnection() { $connection = mysql_connect(Config::$host, Config::$port etc); mysql_select_db($connection, Config::$schema); return $connection; } }
а затем в вашем коде
$connection = ConnectionFactory::CreateConnection(); mysql_query($connection, $sqlApiAccess) or die('Error, insert query failed');