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

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

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

Поэтому в 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; ? Но как выбрать базу данных позже?

Вот мой единственный и единственный сценарий перезаписи, который является основным в большинстве веб-проектов, и я надеюсь, что это принесет мне не только понимание того, как действительно работает новая система 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 для разработчиков MySQL . Спасибо.

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

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

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

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

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

  • 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 с гиперссылками .

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

 $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() .