ЗНАЙТЕ INTUIT, лекции, Perl и MySQL

Езикът за програмиране Perl еволюира от инструмент, използван предимно от системните администратори на Unix, до най-широко използваната платформа за разработка на World Wide Web. Първоначално Perl не беше предназначен за уеб, но неговата лекота на използване и мощни функции за манипулиране на текст го направиха естествено подходящ за CGI програмиране. По подобен начин, когато mSQL за първи път излезе на сцената, изключителната му компактност и скорост на изпълнение го направиха много привлекателен за уеб разработчиците, които трябваше да обслужват хиляди операции дневно. MySQL, със своята висока скорост и разширени функции, се превърна в още по-привлекателен инструмент за уеб разработчиците. Естествено е, следователно, че е разработен Perl интерфейс към двете бази данни - MySQL и mSQL, като по този начин се комбинират техните предимства.

По времето, когато беше написан този материал, имаше два интерфейса между Perl и MySQL с mSQL. По-ранният се състои от специализираните интерфейси Myaql.pm и Msql.pm, които работят съответно само с MySQL и mSQL. Друг, по-нов интерфейс е плъгин в пакета DBI (DataBase Independent) - независими от базата данни модули. DBI е опит за предоставяне на общ API на Perl за достъп до всяка база данни и осигуряване на по-голяма преносимост. Интерфейсът DBI се превърна в най-надеждния и стандартен интерфейс и разработчиците на MySQL препоръчват използването само на DBI, тъй като по-нататъшното развитие на модулите Mysql .pm и Msql.pm е преустановено. Тук ще говорим за DBI.

Препоръчителният метод за достъп до MySQL и mSQL бази данни от Perl е интерфейсът DBD/DBI. DBD/ DBI означава DataBase Dependent / DataBase Independent.Името е свързано с двустепенна реализация на интерфейса. Най-долният слой е зависимият от базата данни слой. Той има свои собствени модули за всеки тип база данни, налични от Perl. Върху този слой е независим от базата данни слой. Това е интерфейсът, който използвате при достъп до базата данни. Ползата от такава схема е, че програмистът трябва да знае само един API на слоя, независим от базата данни. Когато се появи нова база данни, трябва само да напишете DBD (зависим) модул за нея и тя ще бъде достъпна за всички DBD/DBI програмисти.

Както при всеки Perl модул, за да получите достъп, трябва да посочите DBI в директивата за използване:

Когато изпълнявате програми на Perl за MySQL/mSQL, винаги трябва да се дава аргументът на командния ред -w. Това ще накара DBI да пренасочи всички специфични за MySQL и mSQL съобщения за грешка към STDERR и вие ще можете да видите грешки, причинени от работа с базата данни, без да се налага изрично да ги проверявате в програмата.

Атрибутът servertype е името на специфичен за базата данни DBD модул, в нашия случай " mysql " или " mSQL " (отбележете точния използван регистър). Първата опция създава връзка към MySQL сървъра на локалната машина чрез Unix сокет. Това е най-ефективният начин за комуникация с базата данни и трябва да се използва при свързване към локален сървър. Ако е посочено име на хост, то се използва за свързване към сървър на този хост на стандартния порт, освен ако не е посочен и номер на порт. Ако не посочите потребителско име и парола, когато се свързвате към MySQL сървъра, тогава потребителят, който изпълнява програмата, трябва да има достатъчно права в базата данни MySQL. За mSQL бази данни потребителското име и паролата не трябва да бъдатбъде посочено.

Perl 5 има две конвенции за извикване на модули. В обектно-ориентирания синтаксис символът със стрелка "->" се използва за обозначаване на метод от определен клас. (както в DBI ->свързване). Друг метод е да се използва индиректен синтаксис, при който името на метода е последвано от името на класа и след това от аргументите. В последния пример методът за свързване трябваше да бъде написан като connect DBI ' DBI :mysql:mydata', 'me', ' mypass . Ранните версии на Msql.pm използваха само индиректен синтаксис и изискваха да следвате метода за изписване с главни букви, определен от mSQL C API. Голяма част от стария код на MsqlPerl съдържа редове като SelectDB $dbh 'test', където можеше да бъде написано по-просто: $dbh->selectdb('test'). В случай, че все още не сте се досетили, ние не сме безразлични към обектно-ориентирания синтаксис, дори само защото използването на стрелка прави връзката между клас и метод ясна.

След като се свържете с MySQL или mSQL сървър, спецификаторът на базата данни - $dbh във всички примери в този раздел - става шлюз към базата данни. Например, SQL заявката се подготвя по следния начин:

Когато работите с mSQL, само една база данни може да бъде избрана в даден момент за един манипулатор на база данни, това ограничение се налага от mSQL сървъра. Въпреки това можете да промените текущата база данни по всяко време, като извикате свързване отново. Когато работите с MySQL, можете да включите други бази данни в заявката, като изрично посочите техните имена. Освен това, както в MySQL, така и в mSQL, ако имате нужда от достъп до множество бази данни едновременно, можете да създадете множество манипулатори на база данни и да ги споделите.

За да илюстрирате използването на DBI, разгледайте следните прости програми. В пример 1 datashow.cgi приема име като параметървъзел; ако няма параметър, се приема името " local-host ". След това програмата изброява всички налични бази данни на този възел.

Пример 1. CGI програма datashow.cgi показва всички налични бази данни на MySQL или mSQL сървър

В пример 2 tableshow.cgi приема като параметри името на сървъра на базата данни (по подразбиране е „ localhost “) и името на базата данни на този сървър. След това програмата показва всички налични таблици в тази база данни.

Пример 2: CGI програмата tableshow.cgi изброява всички таблици в база данни

И накрая, пример 3 показва как да се покаже цялата информация за определена таблица.