To'ldiruvchilar bilan ishlash
To'ldiruvchilarni amalga oshirishning ikkita varianti mavjudligini tushunishingiz kerak - server va mijoz:
Birinchi holda, so'rov to'ldiruvchilar bilan serverga o'tadi va ma'lumotlar undan alohida yuboriladi. Ingliz tilida u mahalliy deb ataladi tayyorlangan bayonotlar - "mahalliy" tayyorlangan ifodalar - ya'ni to'ldiruvchilarni qayta ishlash DBMSning o'zi tomonidan, serverda amalga oshiriladi . Qisqartirish uchun men "server to'ldiruvchilari " nomidan foydalanaman.
mijozdagi to'ldiruvchilar o'rniga so'rovlar qatoriga almashtiriladi, klassik SQL so'rovini hosil qiladi, so'ngra odatiy tarzda ma'lumotlar bazasiga o'tadi.
Har bir usul o'zining afzalliklari va kamchiliklariga ega, biz quyida muhokama qilamiz.
Shuni ham yodda tutish kerakki, PDO bir vaqtning o'zida ushbu ikkita stulda o'tiradi - sukut bo'yicha u ikkinchi variantga muvofiq ishlaydi, faqat birinchisiga taqlid qiladi. Ushbu funktsiyani PDO serverga so'rovdan alohida ma'lumotlarni yuborish orqali o'chirib qo'yish mumkin.
$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
Ammo hatto emulyatsiya dasturchi ishtirokisiz amalga oshirilganligi sababli, quyida biz PDO ni server to'ldiruvchilari vakili sifatida ko'rib chiqamiz .
Server to'ldiruvchilari
Boshlash uchun, keling, formulaga o'taylik - nima uchun umuman in'ektsiya qilish mumkin?Aslida, SQL so'rovi bu dasturdir. To'liq dastur - operatorlar, o'zgaruvchilar va string literallari bilan. Muammo shundaki, biz ushbu dasturni yo'lda dinamik ravishda yig'amiz. Bizning PHP skriptlarimizdan farqli o'laroq, ular bir marta va umuman yoziladi va kiruvchi ma'lumotlarga qarab o'zgarmaydi, SQL so'rovi har safar yangidan dinamik ravishda yaratiladi. Natijada, noto'g'ri formatlangan ma'lumotlar so'rovni buzishi yoki hatto biz taqdim etmagan operatorlarni almashtirish orqali uni o'zgartirishi mumkin. Aslida, bu in'ektsiyalarning mohiyati.
To'ldiruvchilarni server tomonida qayta ishlash bizga nimani taklif qiladi ?
Juda oddiy narsa: biz dasturimizga ... o'zgaruvchilar kabi narsani kiritamiz ! Ha, to'ldiruvchi oddiy o'zgaruvchi bo'lib, u bizning SQL "skriptimiz" ga qattiq kodlangan va ma'lumotlarga qarab o'zgarmaydi. Va ma'lumotlarning o'zi serverga so'rovdan alohida o'tadi va u bilan hech qachon kesishmaydi. So'rov talqin qilingandan keyingina ma'lumotlar to'g'ridan-to'g'ri bajarish bosqichida qo'llaniladi.
Amalda, bu shunday ko'rinadi: tayyorlash () chaqirilganda, bizning so'rovimiz to'g'ridan-to'g'ri serverga ushbu shaklda o'tadi - to'ldiruvchilar / o'zgaruvchilar bilan server uni tahlil qiladi va signal beradi - "hamma narsa yaxshi , ma'lumotlarni olishga tayyor" (yaxshi) , yoki xato haqida xabar beradi). Va keyin, () bajarilganda, ma'lumotlar allaqachon serverga yuboriladi (va matn shaklida emas, balki so'rov natijasi qaytariladigan tuzilishga o'xshash ikkilik paketda) va to'g'ridan-to'g'ri bajarishda ishtirok etadi .
Nazariy jihatdan bu juda jozibali ko'rinadi.Ammo amalda, afsuski, PHP da Mysql bilan ishlash uchun mavjud kutubxonalarda tayyorlangan ifodalar bilan ishlashni amalga oshirish hali ham idealdan juda uzoqdir.
Do'stlaringiz bilan baham: |