Программирование PHP OOP MySQL

Я новичок в программировании на 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 будет иметь свою собственную связь … а затем закрыть, когда это будет сделано?

Solutions Collecting From Web of "Программирование PHP OOP MySQL"

Я бы не советовал создавать ваши подключения к базе данных таким образом. Создайте одно соединение и добавьте его в объект, используя его. Вам не нужно создавать новое соединение для каждого объекта.

Пример кода:

 $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 } } ?>