Yodda tuting: Agar siz doimiy aloqadan foydalanmoqchi bo'lsangiz, o'rnatishingiz kerak PDO :: ATTR_PERSISTENT PDO klassi konstruktoriga berilgan haydovchi parametrlari qatorida. Ushbu atributni PDO :: setAttribute () orqali ob'ektning namunasini yaratgandan so'ng, haydovchi doimiy aloqalarni ishlatmaydi. Va shuningdek, bu holda siz ba'zi ehtiyojlaringiz uchun PDOStatement sinfini uzaytira olmaysiz, ya'ni. o'rnatib bo'lmaydi: PDO :: ATTR_STATEMENT_CLASS
Menimcha, tajribangizni oshirib, ma'lumotlar bazasi bilan ishlashda mysql_ funktsiyalaridan PDO-ga o'tish vaqti keldi. Ushbu kutubxona PHP uchun kuchli va tezkor qo'shimcha hisoblanadi. Uning afzalliklaridan biri ko'plab ma'lumotlar bazalari (MS SQL, MySQL, PostgreSQL, Oracle va boshqalar) bilan ishlash. Ushbu kutubxonaning yana bir o'ziga xos xususiyati - bu tayyorlangan ma'lumotlar, ya'ni ma'lumotlar bazasi bilan ishlashni tezlashtirishi, va eng muhimi ma'lumotlar almashinuvini xavfsiz qilishi va sql-enjection kabi zaifliklarni unutishi kerak. Bundan tashqari, boshqa juda foydali xususiyatlar mavjud. Ushbu maqolada men tez-tez ishlatiladigan ish namunalarini to'plashga harakat qildim, ular asosida PDO-ning mohiyatini darhol tushunishingiz mumkin.
PHP-da MySQL ma'lumotlar bazasi bilan ishlash uchun uchta kengaytma mavjud: mysql, mysqli va PDO. PHP PDO (PHP Data Objects) PHP 5.1 va undan yuqori versiyalarga kiritilgan. Tushunganimdek, hozirgi vaqtda mysql_ ma'lumotlar bazasi bilan ishlash funktsiyalaridan foydalanish tavsiya etilmaydi, chunki php_mysql ni ishlab chiqish MySQL 4.1.3 funktsiyasini qo'llab-quvvatlashni to'xtatdi. shuningdek, tranzaktsiyalarni, ob'ekt interfeysini qo'llab-quvvatlamaydi va qiymatlarni so'rovga almashtirishda zaifliklarga duchor bo'ladi. Mysql_-dan so'ng mysqli kengaytmasi paydo bo'ldi (MySQL 5-versiyada yaxshilandi), u MySQL-ning yangi xususiyatlarini qo'llab-quvvatlaydi va ikkala OPP sintaksisini va protsessual dasturlarni ishlatadi. Ushbu barcha kutubxonalar standart MySQL mijozlar kutubxonasidan (libmysql) foydalanadi. Xuddi shu eslatmada, mysql bilan qanday ishlashni jonli misollarini ko'rib chiqamiz - PDO.
PDO ma'lumotlar bazasini ulash
// PDO yordamida MySQL-ga ulanish misoli $ db \u003d yangi PDO ("mysql: host \u003d localhost; dbname \u003d test", $ user, $ pass);
Ma'lum bir ma'lumotlar bazasi serveriga muvaffaqiyatli ulanish o'rnatilgandan so'ng, PDO qaytariladi. Ushbu ob'ekt sizga turli xil ma'lumotlar bazasi vazifalarini bajarishga imkon beradi.
Agar ulanishda xatolik bo'lsa, istisno mexanizmi ishga tushiriladi - PDOException. Siz har doim PDO operatsiyalarini sinash / tutish blokiga o'rashingiz kerak. Agar siz xatolar bilan ishlamoqchi bo'lsangiz, istisnolarni qo'lga kiritishingiz mumkin yoki uni set_exception_handler () yordamida yaratgan global istisno qayta ishlovchisi (istisno) uchun qoldirishingiz mumkin. PDO xatolar uchun maxsus funktsiyalarga ega: errorCode () - xato raqamini qaytaradi, errorInfo () - xato raqami va tavsifi bilan qatorni qaytaradi. Ular odatiy xato rejimi ERRMODE_SILENT bo'lganligi sababli kerak. Bunday holda, ushbu xatolarni ko'rish uchun siz ularga qo'ng'iroq qilishingiz kerak bo'ladi:
Echo $ conn-\u003e errorCode (); echo $ conn-\u003e errorInfo ();
Buning oldini olish uchun ishlab chiqish rejimida kerakli xato rejimini darhol o'rnatish osonroq bo'ladi: ATTR_ERRMODE va \u200b\u200bERRMODE_EXCEPTION. Siz shuningdek ma'lumotlar bazasi bilan ishlash uchun kodlashni buyurishingiz mumkin. Natijada, biz bunday ulanish kodini olamiz:
$ $ Db \u003d yangi PDO ("mysql: host \u003d $ host; dbname \u003d $ dbname", $ user, $ password); $ db-\u003e setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); $ db-\u003e exec ("nomlarni o'rnatish utf8");) qo'lga olish (PDOException $ e) (echo $ e-\u003e getMessage ();)
Ma'lumotlar bazasiga muvaffaqiyatli ulangandan so'ng, PDO sinfining namunasi skriptga qaytariladi. $ db ma'lumotlar bazasi tavsifini o'z ichiga oladi. Ulanish PDO hayoti davomida faol bo'lib qoladi. Ulanishni yopish uchun siz unga boshqa barcha havolalar o'chirilishi kafolati bilan ob'ektni yo'q qilishingiz kerak. Buni ob'ektni NULL qiymatiga ega bo'lgan o'zgaruvchini tayinlash orqali amalga oshirish mumkin. Agar siz buni aniq qilmasangiz, PHP skript tugashi bilan ulanishni avtomatik ravishda yopadi.
// aloqani yoping $ db \u003d null;
Ko'pgina veb-ilovalar ma'lumotlar bazasi serverlariga doimiy ulanishdan foyda ko'rishadi. Doimiy ulanishlar skript oxirida yopilmaydi, lekin boshqa skript xuddi shu hisob ma'lumotlarini ishlatib ulanishni talab qilganda saqlanadi va qayta ishlatiladi. Doimiy aloqa sizga skript har safar ma'lumotlar bazasiga kirish uchun har safar yangi ulanishni yaratish uchun resurslarni kamaytirishga imkon beradi, bu esa veb-dasturni tezroq ishlashiga olib keladi.
// Doimiy aloqa $ dbh \u003d yangi PDO ("mysql: host \u003d localhost; dbname \u003d test", $ foydalanuvchi, $ pass, array (PDO :: ATTR_PERSISTENT \u003d\u003e haqiqiy));
Endi siz qanday qilib ulanishni ochish va yopishni ko'rdingiz, keling, PDO bilan ishlashning boshqa misollarini ko'rib chiqaylik. Bunday holda, men sizga ma'lum bir ma'lumotlar bazasiga qarshi so'rovlarni qanday bajarish kerakligini ko'rsataman. So‘rovlarni 3 funksiya yordamida bajarish mumkin: exec (), query () va tayyorlash + bajarish.
Exec ()
Birinchisi, exec faqatgina ishtirok etgan satrlar sonini yoki xatoga FALSE qaytaradi va ma'lumotlar qaytarilmaganda ishlatiladi, masalan o'chirilganda:
// exec () metodidan foydalaning try ($ db \u003d new PDO ("mysql: host \u003d localhost; dbname \u003d test", "user", "password"); $ delrows \u003d $ db-\u003e exec ("foydalanuvchilarni QANDAY QILISH id\u003e 20 "); echo" O'chirilgan satrlarning soni: ". $ pasayishi;) ushlash (PDOException $ e) (" Xato: "echo." $ e-\u003e getMessage (); exit ();) // Boshqa $ db- \u003e exec ("Qaerda joylashgan 1-chi millatni o'chirib tashlash"); // yoki $ db-\u003e exec ("SET time_zone \u003d" -8: 00 ""); // yoki $ db-\u003e exec ("CREATE TABLE` test" (id INT PRRIYYA KEY AVTO_INCREMENT, ism VARCHAR (20) NULL DEFAULT YO'Q "", VARCHAR elektron pochtasi (50) YO'Q TO'LDIRILMAYDI "") "); // yoki $ db-\u003e exec ("SET CHARACTER SET utf8");
So‘rov ()
Ikkinchi so'rov () natijani PDOStatement ob'ektiga qaytaradi. Shuningdek, natijani yoki FALSE xato haqida qaytaradi. Siz unga oddiy so'rovlarni ishonib topshirishingiz mumkin. Siz so'rovni () shartli ravishda ishlatishingiz mumkin (men nima uchun kimdir kerakligini aniq bilmayman), ammo keyin ham PDO :: quote usuli yordamida ma'lumotlarni skanerlashingiz kerak.
// Oddiy so'rovlar $ db-\u003e so'rov ("SET CHARACTER SET utf8"); $ db-\u003e so'rov ("SELECT * FROM foydalanuvchilar"); // Siz qatorlar sonini hisoblashingiz mumkin $ stmt \u003d $ db-\u003e so'rov ("SELECT * FROM jadval"); $ row_count \u003d $ stmt-\u003e rowCount (); echo $ row_count. "satrlar tanlandi"; // $ stmt \u003d $ db-\u003e so'rovi bilan yana bir variant ("SELECT * foydalanuvchilardan"); $ qatorlar \u003d $ stmt-\u003e fetchAll (); $ count \u003d hisoblash ($ satrlar); oldingi ($ satr sifatida $ satr) (print_r ($ satr;
Do'stlaringiz bilan baham: |