Как успешно переписать старый код mysql-php с устаревшими функциями mysql_ *? - программирование
Подтвердить что ты не робот

Как успешно переписать старый код mysql-php с устаревшими функциями mysql_ *?

Я все еще участвую в основном из книг, которые покупаю, но сегодня я стараюсь, чтобы моя книга была старой, хотя я купил ее в этом году в отношении программирования на PHP. Теперь я знаю, что команды mysql_ * на PHP устарели и должны быть заменены более безопасными и стабильными подготовленными операторами и PDO. Поэтому я поставил себе переписать всю свою сеть в соответствии с ней, и, может быть, мне понадобятся некоторые советы от вас, как это сделать правильно и работать у вас все более опытные ребята:)

Итак, я начну переписывать только основную часть (подключитесь к db и выбирая DB) здесь (остальное я могу сделать самостоятельно с помощью google и руководств). Я напишу здесь свой старый script и спрошу вас, делаю ли я все правильно и ничего не пропускаю, и надеюсь, что это может быть хорошим руководством для других людей. Итак, давайте начнем.

Итак, в config у меня есть что-то вроде этого:

$db = new dbConn('127.0.0.1', 'root', 'pass', 'people', 'animals');

Что должно быть следующим:

$db = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');

Правильно? Но когда мне нужно выбрать базу данных позже, я должен сделать это без dbname=people;? Но как выбрать базу данных позже?

Вот мой единственный и единственный script для перезаписи, который является основным в большинстве веб-проектов, и я надеюсь, что это принесет мне не только понимание того, как действительно работает новая система PDO:

class dbConn
{
  public function __construct($server, $user, $pass, $db_people, $db_animals)
  {    
    if (!empty($server) && !empty($user) && !empty($pass) && !empty($db_people) && !empty($db_animals))
    {
      $this->server = $server;
      $this->user =  $user;
      $this->pass = $pass;
      $this->db_people = $db_people;  
      $this->db_animals = $db_animals;  
      $this->connect(); 
    }  
    else
    {
      die("Set up connection to db");
    }
  }

  public function connect()
  {
    $this->conn = mysql_connect($this->server, $this->user, $this->pass) or die ('cannot connect to MySQL');
  }

  public function selectDb($database)
  {
    switch($database)
    {
      case 'people':
        mysql_select_db($this->db_people, $this->conn) or die ('cannot connect to database '.$this->db_people.'.');
        mysql_query("SET NAMES 'utf8'");
        break;

      case 'animals':
        mysql_select_db($this->db_animals, $this->conn) or die ('cannot connect to database '.$this->db_animals.'.');
        mysql_query("SET NAMES 'utf8'"); 
    }
  }

  public function __destruct() 
  {
    if (!empty($this->conn))
    {
      mysql_close($this->conn); 
    }
  }  
}

Итак, из того, что я знаю из Google и Wiki, функции, такие как public function __construct и public function __destruct(), больше не нужны, не так ли? То же самое с такими функциями, как public function connect() SO, только что осталось public function selectDb($database), но я понятия не имею, как это сделать правильно, без ущерба для всего соединения с базой данных. Потому что в остальной части моего кода (не упоминается здесь) я легко могу выбрать базу данных по этому коду: $this->db->selectDb("people"); Но с подготовленными утверждениями я не знаю, возможно ли это даже в том случае, если это возможно. Надеюсь, некоторые советы по этому поводу помогут мне и другим пользователям лучше понять этот новый код. Другие части кода, которые могут возникнуть в этом PDO Tutorial для разработчиков MySQL. Спасибо.

4b9b3361

Ответ 1

Собственно, простой, сладкий и короткий: Да, больше не нужно.

Давайте рассмотрим код, который мы не потеряли:

  • __construct - Конструктор просто содержал всю конфигурацию. PDO имеет гораздо более понятную концепцию здесь, строку соединения, содержащую большую информацию:

     mysql:host=127.0.0.1;dbname=people;charset=UTF-8
    

    Кроме того, PDO предоставляет конструктор для использования в готовом виде, поэтому double необязательно.

  • connect - Функция соединения больше не нужна. Это делается путем создания экземпляра PDO. Вы можете искать исключения, в руководстве PHP есть пример на странице конструктора.

  • selectDb - Эта сложная функция больше не нужна. Вау, третья функция, которую мы можем просто сбросить из-за строки подключения PDO. Большая мощность с таким количеством символов. Ура!

  • __destruct - деструктор. Пусть справедливо: MySQL тоже не нужен. Однако с PDO мы получаем это бесплатно - без написания одной строки кода.

Выглядит хорошо! Вам удалось перейти от этого неясного класса базы данных к PDO, удалив устаревший код! ПОЗДРАВЛЯЕМ:

$db = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');

Если вы сейчас подумаете, а что, если я хочу иметь класс базы данных самостоятельно? Хорошо, вы можете это сделать, потому что вы можете перейти от PDO (да, это работает!):

class DB extends PDO
{
   ... my super-new-shiny-code
}

Почему вы можете это сделать? Не знаю, но, возможно, он более свободно говорит о вашем коде. Если вы ищете лучший пример кода, у меня есть его в таблице PHP/MySQL с гиперссылками.

Ответ 2

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

$pdo_instance->query("USE people");

и

$pdo_instance->query("USE animals");

или, возможно, лучший (и более чистый) способ может быть

$db_people = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');

и

$db_animals = new PDO('mysql:host=127.0.0.1;dbname=animals;charset=UTF-8', 'root', 'pass');

Если вы помечаете базу данных в активном классе, вы можете получить доступ к данным с помощью $db_people->query() или $db_animals->query().