Я новичок в программировании на PHP и хотел бы помочь с небольшим вопросом. Ознакомьтесь с приведенным ниже кодом:
PHP-код
<?php class Account { public function register() { $db_link = mysql_connect("localhost","root",""); // Create Connection if (!$db_link) // Check connection { die(mysql_error()); } mysql_close($db_link); // Close Connection } public function login() { $con = mysql_connect("localhost","root","") // create connection if (!$con) // create connection { die(mysql_error()); } mysql_close($con); //close connection } } ?>
Мой вопрос в том, является ли лучший способ для создания отдельных связей db для каждого из методов объекта? Есть ли лучший или альтернативный способ сделать это? Надеюсь, я объяснил достаточно хорошо.
Правильно ли будет следующее?
$x = new Account("localhost", "root", "");
-and x будет иметь свою собственную связь … а затем закрыть, когда это будет сделано?
Я бы не советовал создавать ваши подключения к базе данных таким образом. Создайте одно соединение и добавьте его в объект, используя его. Вам не нужно создавать новое соединение для каждого объекта.
Пример кода:
$connection = new mysqli('localhost', 'user', 'password'); $Account = new Account($connection);
Вам нужно будет изменить Account
чтобы он выглядел так:
class Account { protected $connection; public function __construct(mysqli $connection) { $this->connection = $connection; } public function register() { // use $this->connection for db } public function login() { // use $this->connection for db } }
Я также хотел бы предложить вам взглянуть на документы php.net о выборе API MySQL . Если вы действительно хотите использовать ООП с PHP и MySQL, вам нужно перейти на mysqli
или PDO
поскольку используемый вами API действительно не поддерживает интерфейс OOP.
Я предлагаю:
public function __construct(mysqli $connection) { $this->connection = $connection; if(!$this->$connection) { die(mysql_error()); } } public function __destruct() { mysql_close($this->$connection); }
Вы можете использовать некоторые коды, например:
$db_link = mysql_connect("localhost","root",""); // Create Connection if (!$db_link) // Check connection { die(mysql_error()); } mysql_select_db("db_name"); $q=mysql_query("SELECET * FROM table_name LIMIT 1");
Другие запросы будут здесь
mysql_close($db_link); // Close Connection
Одного соединения на каждой странице достаточно. более одного соединения или отключения от сервера sql и повторного входа в систему могут привести к снижению производительности.
Вы можете использовать статический член, и все ваши объекты будут совместно использовать одно соединение с базой данных.
См. Также PHP – слой абстракции БД использует статический класс vs singleton object?
Если вы хотите сжать его и сохранить его более удобным / более управляемым, вы можете поместить код подключения mysql в свой собственный метод и вызвать его так:
<?php class Account { private $connection; private function connect() { $this->$connection = mysql_connect("localhost","root",""); // Create Connection } public function register() { $this->connect(); if (!$this->$connection) // Check connection { die(mysql_error()); } mysql_close($this->$connection); // Close Connection } public function login() { $this->connect(); if (!$this->$connection) // create connection { die(mysql_error()); } mysql_close($this->$connection); //close connection } } ?>