Jak pomyślnie przepisać stary kod mysql-php z przestarzałymi funkcjami mysql_ *?
Nadal uczę się głównie z książek, które kupuję, ale dzisiaj staram się, że moja książka jest stara, mimo że kupiłem ją w tym roku, jeśli chodzi o programowanie w PHP. Teraz wiem, że polecenia mysql_ * w PHP są przestarzałe i powinny zostać zastąpione bardziej bezpiecznymi i stabilnymi przygotowanymi instrukcjami i PDO. Postanowiłem więc przepisać całą moją stronę zgodnie z nią i być może będę potrzebował od ciebie porad, jak to zrobić poprawnie i pracować z tobą bardziej doświadczonymi facetami :)
Zacznę więc przepisywać tylko z główną częścią (połącz się z bazą danych i wybierz DB) tutaj (resztę mogę zrobić sam z google i instrukcjami). Napiszę tu mój stary skrypt i zapytam, czy robię wszystko dobrze i niczego nie brakuje, i mam nadzieję, że może to być dobry podręcznik / odpowiedź dla innych ludzi. A więc zacznijmy.
Więc w konfiguracji mam coś takiego:
$db = new dbConn('127.0.0.1', 'root', 'pass', 'people', 'animals');
Które powinny wyglądać tak:
$db = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');
Dobrze? Ale kiedy muszę później wybrać bazę danych, powinienem to zrobić bezdbname=people;
? Ale jak wybrać bazę danych później?
Oto mój jedyny skrypt do przepisania, który jest podstawowy w większości projektów internetowych i mam nadzieję, że przyniesie mi to nie tylko zrozumienie, jak naprawdę działa nowy system 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);
}
}
}
Więc z tego co wiem z Google i Wiki - funkcje takie jakpublic function __construct
ipublic function __destruct()
nie powinno być już potrzebne, prawda? To samo z funkcjamipublic function connect()
Tyle tylko zostałopublic function selectDb($database)
ale nie mam pojęcia, jak to zrobić poprawnie, nie uszkadzając połączenia z bazą danych. Ponieważ w pozostałej części mojego kodu (niewymienionego tutaj) mogę łatwo wybrać bazę danych za pomocą tego kodu:$this->db->selectDb("people");
Ale z przygotowanymi oświadczeniami nie wiem, czy jest to możliwe w prosty sposób. Mam nadzieję, że kilka porad od ciebie pomoże mi i innym użytkownikom lepiej zrozumieć ten nowy kod. Inne części w kodzie, które możesz mieć, są w tym opisaneSamouczek PDO dla programistów MySQL. Dziękuję Ci.