Я все еще участвую в основном из книг, которые покупаю, но сегодня я стараюсь, чтобы моя книга была старой, хотя я купил ее в этом году в отношении программирования на 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()
.