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

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

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

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

$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()больше не нужны, верно? То же самое с такими функциями, как публичная функция connect()Итак, осталось только публичная функция selectDb($database), но я понятия не имею, как это сделать правильно, не разрушая все соединения с базой данных. . Потому что в остальной части моего кода (не упомянутого здесь) я могу легко выбрать базу данных по этому коду: $this->db->selectDb("people");Но с подготовленными операторами я не знаю, можно даже простым способом. Я надеюсь, что некоторые советы по этому поводу от вас помогут мне и другим пользователям лучше понять этот новый код. Другие части кода, которые у вас могут быть, описаны в этом Учебном руководстве по PDO для разработчиков MySQL. Спасибо.

16
задан Byakugan 6 June 2012 в 17:58
поделиться