PHP ООП MySQL Программирование - PullRequest
7 голосов
/ 03 января 2012

Я новичок в программировании на 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
  }

}
?>

Мой вопрос заключается в том, является ли создание отдельных ссылок БД для каждого из методов объекта лучшим способом? Есть ли лучший или альтернативный способ сделать это? Надеюсь, я достаточно хорошо объяснил.


Правильно ли следующее?

$x = new Account("localhost", "root", "");

-и х будет иметь свое собственное соединение ... и затем закроется, когда это будет сделано?

Ответы [ 5 ]

10 голосов
/ 03 января 2012

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

Пример кода:

$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 о выборе MySQL API . Если вы действительно хотите использовать ООП с PHP и MySQL, вам нужно переключиться на mysqli или PDO, так как используемый вами API не поддерживает интерфейс ООП.

3 голосов
/ 03 января 2012

Я предлагаю:

public function __construct(mysqli $connection) {
    $this->connection = $connection;
    if(!$this->$connection) {
        die(mysql_error());
    }
}

public function __destruct() {
    mysql_close($this->$connection);
}
0 голосов
/ 03 января 2012

Вы можете использовать некоторые коды, такие как:

$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 и повторный вход в систему может привести к снижению производительности.

0 голосов
/ 03 января 2012

Если вы хотите уменьшить его и сделать его более аккуратным / более управляемым, вы можете поместить код подключения 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
  }

}
?>
0 голосов
/ 03 января 2012

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

См. Также PHP - уровень абстракции БД использует статический класс против объекта singleton?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...