Masalan, quyidagi faktlarni keltirish kifoya:
Natijalar qatorini massivga olish kabi oddiy xususiyat ( mysql_fetch_array ( ) ga o'xshash ), tayyorlangan ifodalardan foydalangan holda so'rovlar uchun MySQLI -ga faqat 5.3(!) versiyada qo'shilgan. Ushbu versiyadan oldin kutubxona jahannam buzuqliklarisiz amalda yaroqsiz edi .
Xuddi shu narsa PDO-da ulanish kodlashni o'rnatish uchun ham amal qiladi - bu faqat o'sha 5.3-da mumkin bo'ldi. Oldingi barcha versiyalarda, PDO-da ulanishni kodlashni o'rnatish shunchaki imkonsiz edi (bu - adolat uchun, buni tan olish kerak - moslik rejimi o'chirilganida katta muammo emas, lekin - teshik, ser!).
mysqli ba'zi hollarda ma'lumotlar bazasidagi maydonning maksimal hajmiga teng xotirani zaxiralashga harakat qiladi - o'rta matnlardan ehtiyot bo'ling !
Bu faktlar shuni ko'rsatadiki, ikkala kutubxona ham hali ham xom ashyo va ularda boshqa zarur funksiyalar yo'qligini kutishimiz mumkin.
Keling, mavjud kutubxonalarning asosiy kamchiliklarini sanab o'tamiz
so'zlilik
to'ldiruvchilar etishmayapti
disk raskadrovka maqsadida klassik SQL so'rovini olishning iloji yo'qligi
mumkin bo'lgan ishlash muammolari* (bu masala quyida muhokama qilinadi)
va biz ularni batafsilroq tahlil qilamiz
Ko`pso`zlik
Masalan, so'rov natijasining barcha qatorlarini ikki o'lchovli massivga olish kabi talab qilinadigan operatsiyani olaylik. mysqli hali ham bunday xususiyatga ega emas. Yoki, aytaylik, o'zgaruvchilarni u erda faqat alohida funktsiya bilan
to'ldiruvchilarga bog'lashingiz mumkin . Natijada, bitta so'rov ma'lumotlarini massivga olish uchun bizga kamida to'qqiz (!) qator kod kerak bo'ladi:
$data = array();
$query = "SELECT Name, Population, Continent FROM Country WHERE Continent=? ORDER BY Name LIMIT 1";
$stmt->prepare($query);
$stmt->bind_param("s", $continent);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
$data[] = $row;
}
Bundan tashqari, ushbu kodning aksariyati hech qanday semantik yukni ko'tarmaydi, barcha bajarilgan so'rovlar uchun mutlaqo bir xil va ma'lumotlarni olish uchun faqat ikkita satr etarli bo'lishiga qaramay, yuzlab skriptlarda ko'p marta takrorlanadi:
$query = "SELECT Name, Population, Continent FROM Country WHERE Continent=? ORDER BY Name LIMIT 1";
$data = $db->getAll($query,$continent);
PDO bilan _ bu Oz u erda yaxshiroq _ taxmin qildi ruxsat berish uzatish massiv ichida bajaring ( ) va u yerda usuli fetchAll (). Lekin siz hali ham eng oddiy operatsiyalar uchun juda ko'p keraksiz monoton kodlarni yozishingiz kerak.
Xususan, bizning maqolamiz mavzusiga qaytaylik - majburiy . Bu yerda menda $_GET[' id '] o'zgaruvchisi bor; Men uni to'ldiruvchiga bog'lamoqchiman . Ajoyib, men buni to'g'ri bajara olaman ( ) ... lekin uni massiv qilish orqali. Nima uchun? Haydovchining o'zi buni men uchun qila olmaydimi?
Do'stlaringiz bilan baham: |