Обикновена обвивка за PDO
Като цяло, поради факта, че самата PDO библиотека вече е обвивка, е доста трудно да се предложат някакви подобрения за нея. Опитите на начинаещи да разширят функционалността рядко водят до нещо умно или полезно. Но въпреки това тази библиотека може да бъде леко подобрена.
Проблем N1, многословие
Основният недостатък както на PDO, така и на mysqli при работа с подготвени отчети е, че техните вградени функции са изострени за многократно изпълнение на подготвен израз (когато подготвянето се извиква само веднъж и след това изпълнява () се извиква многократно с различни данни) . Поради това те са толкова многословни. Но проблемът е, че на практика в PHP рядко се налага да изпълнявате подобни заявки. В резултат на това за повечето заявки трябва да пишете ненужен код всеки път:
$ stmt = $ pdo -> подгответе ($ sql);
$ stmt -> изпълни ($ params);
$ данни = $ stmt -> fetch ();
Това, което се нарича - за какво са се борили, са се сблъскали с него. Не се случи намаляване на кода в сравнение със запомнящия се mysql_query (). Много бих искал!
В същото време, Уес Фърлонг постави още едно прасе на потребителите на PDO - execute () връща глупава булева стойност, вместо да връща изявление, което би позволило прилагането на верига на методи и получаване на красив код като
$ данни = $ pdo -> подготовка ($ sql) -> изпълнение ($ params) -> извличане ();
Но уви, дори този подход е почти недостъпен. И във всеки случай той е излишен, тъй като в повечето случаи не е нужно нито да се подготвяме, нито да изпълняваме - трябва глупаво да изпълним проклетата заявка, като й предадем проклети данни за заместители.
Следователно, за да намалите количеството документи, добавете една функция към PDO, run (), чиято цяла функция ще бъде сведена до горния код - изпълнете подгответе/изпълнете и върнете изявление:
клас MyPDO разширява PDO
изпълнение на публична функция ($ sql, $ args = NULL)
$ stmt = $ this -> подгответе ($ sql);
$ stmt -> изпълнение ($ аргументи);
върнете $ stmt;
>
>
И вече от изявлението, можем да получим всякакви данни, по всеки стандартен начин:
$ data = $ pdo -> run ("SELECT * FROM users WHERE sex = 'male'") -> fetchAll ();
Проблем N2, наличност
Друго неприятно откритие за начинаещи е, че PDO не може да бъде достъпен никъде в скрипта, като mysql_query ().
Следователно следващото подобрение ще бъде прилагането на достъп до PDO чрез статичен сингълтон. Този модел често се критикува в Интернет и за каузата. Но тук трябва да разберете едно просто нещо: