Home > PHP/MySql > PHP/MySQL 5: Prepared Statement

PHP/MySQL 5: Prepared Statement

Prepared Statement гэж юу вэ?

Prepared гэдэг үг бол бэлтгэсэн гэсэн утгатай энд ч энэ утгаараа хэрэглэгдэнэ. Харин Statement гэдэг их олон утгата үг юм шиг байгаан. Харин энд бол илэрхийлэл гэсэн утгаар илүү хэрэглэгдэж байна. Програмчлалын хэлэнд хэрэглэгдэх утгыг http://en.wikipedia.org/wiki/Statement_(programming) үүгээр холбогдож харна уу. Яг энд байгаа утгаараа SQL хэлэнд ашигладаж байна. Тэгэхээр утгачлан ойлговол урьдчилан бэлтгэсэн sql илэрхийлэл буюу query гэж ойлгож болох нь. Тэгэхээр урдчилаад sql query-ний темплатээ бэлдчихээд түүндээ өгөгдөлүүдийг нь өгөөд л ажиллуулаад байдаг тийм арга техник гэж ойлгож болно. доорхи зүйлүүдийг анхааралтай уншвал бүрэн ойлголт авч чадна.

Яагаад заавал  Prepared Statement ашиглах хэрэгтэй гэж?

Хоёр үндсэн шалтгаан байна. 1) Нууцлал хамгаалалтыг сайжируулж байна. mysql сангаар бичиж байгаа үед sql query-г улаан гараараа бэлтгэдэг. Гаднаас хэрэглэгчийн оруулж байгаа стрингүүдийг шалгаад sql дотороо оруулаад түүнийгээ ажиллуулдаг бол Prepared Statement ашиглаж байгаа тохиолдолд sql query ба түүний авч ажиллах өгөгдөл хоёрыг тусгаарлаж байгаа юм. Ингэснээрээ sql injection гэх мэт халдлагаас хамгаалагдана. (sql injection-ний талаар нэг бичлэг оруулнаа)

2) Програмын ажиллагааны хурд сайжирна. Зарим тохиолдолд 40 дахин хурдассан гэсэн тоо баримт ч харсан санагдана. Яагаад гэвэл хуучин бидний ашигладаг байсан аргаар бол query өгөгдөл нийлээд л нэг сайхан том стринг байх бөгөөд түүнийгээ ажилуулах бүрд ядаж л query-г маань тэр тоолонд нь парсинг хийнэ. Харин Prepared Statement ашиглаж байгаа үед нэг удаа парсинг хийгээд харин өгөгдлүүдийг нь аваад л ажиллаад байна. Үүнээс гадна mysql сүлжээгээр query дамжуулахдаа бүгдийг нь текст болгон дамжуулаад хүлээж авсны дараа буцаан эх хэлбэрт нь шилжүүлэн ажилладаг бол Prepared Statement бинари (binary) протокол ашиглан дамжуулдаг энэ нь бас давуу талуудыг ч бий болгодог юм байна.

Яаж ашиглах вэ?

MySQL 4.1 ба түүнээс хойших хувилбаруудад үүнийг ашиглах боломж бий болсон. PHP5 хувилбарт mysqli сан бий болж түүнийг ашиглах боломжтой болсон. Ер нь бараг бүх хэлнүүдийг Prepared Statement -ийг ашиглах боломжтой. Ингээд одоо mysql бааз дээр Prepared Statement хэлбэрээр query бичиж үзье. Доорхи хялбар query-г mysql дээр prepared statment ашиглан хийж үзье.

SELECT name, birtday FROM anket WHERE name=’Bat’

Үүнийг доорхи зураг дээр байгаа байдалтай бичиж болно.

mysql-ps1

Зураг дээр байгаа зүйлүүдийг тайлбарлая.

mysql> prepare stmt from “select name, birtday from anket where name=?”; гэж Prepared Statement -ээ бэлтгэж байна. ? -ийн оронд нэг утга орж ирэх нь гэдэг нь харагдаж байна.

mysql> set @param=”Bat”; гэж @param гэсэн нэртэй параметр хувсагч үүсгэн түүндээ Bat гэсэн утга олгож байна.

mysql> execute stmt using @param; бэлтгэсэн статментдээ утга олгосон параметрийн хамт ажиллуулж байна. Эндээс харахад энэ аргын ерөнхий санаа харагдаж байна. (Хэрвээ ямар нэг sql хэл болон програмчлалын хэлний мэдлэгтэй бол шүү дээ. ) Ямар ч байсан sql query ба өгөгдөл хоёрыг тусгаарлсан байна. Гэхдээ бас иймэрхүү жижиг query хийхэд уламжлалт хэлбэрээр бичснээс хурдан ажиллаж чадахгүй байх талтай гэдэг. Гэвч аюулгүй байдал энэ тэрийг нь бодвол хавигүй сайхан зүйл шүү дээ. За ингээд дараагийн  php/mysql цувралаар mysqli ашиглан хирхэн Prepared Statement бичих тухай бичлэгээр уулзах хүртэл баяртай.


No related posts.

Related posts brought to you by Yet Another Related Posts Plugin.

  1. matisse
    June 17th, 2009 at 12:48 | #1

    жихэнэ хэрэгтэй ойлголт байна.энэ тэгээд query-гээ энэ хар цонхонд бичинэ гэсэн үг үү?.цаашина сайн судалнаа.та яаг иймэрх үү мэрэгжилийн англи хэлний чухал түлхүүр үгнүүдийн талаар бичвэл.өөрөө цаашина судалхад дөхөм юм бна.thank’s having 😛

  2. matisse
    June 17th, 2009 at 12:50 | #2

    хэхэ таны энэ avatar ууд жаахан сонин сонин smile ууд юм аа.

  3. June 17th, 2009 at 12:57 | #3

    Ер нь энэ цонхонд ингээд юм хийж болно ш тээ. бүх үйлдлийг хийх боломжтой. Гэхдээ энэ боломжийг харуулсан жишээ бөгөөд бид цаашдаа вебийн орчинд нилээд дээд төвшинд энэ хэлбэрээр бичиж сурах нь гол юм.

    Чамд харин дажгүй нь таарсан юм биш үү аватар чинь 😉

  4. ulzii
    June 19th, 2009 at 16:43 | #4

    aulgyui baidal gej nileed durdsan baina. yag yagaad ayulgui bolj baigaa bolon parameter-uuded filter hiigdej baigaa eseh zergiig oruulj ugvul iluu heregtei baih bolovuu. Jishee ni set @param=Bat gej parameter damjuulahad Bat – d ehleed filter hiichihsen baih yostoi yumuu esvel mySql uur filteree hiideg yumuu geh zergeer.

  5. Munguljin
    June 22nd, 2009 at 12:46 | #5

    Энэ талаар ном тавьж өгөөч. Анхлан суралцагчид үүгээр бичвэл сайн юм бн мөн үү? 😛

  6. June 24th, 2009 at 19:57 | #6

    Thanks! Ushuu olon yum bicheerei 😉

  7. sho
    November 10th, 2009 at 16:50 | #7

    mysql iin shine chadvar iig ashiglan mysqli garch irsen gej oilgoloo. param d hen filter hiij bga ym, mysql uu php mysqli yu?

  8. ganzoo
    November 13th, 2009 at 12:11 | #8

    sain bna uu? zaluusaa
    nadad tuslamj heregtei bna…
    yu ve geheer comment uldeedeg asuudal yum. ooroor helbel hi5 deer comment uldeedeg sh tee.
    yag teren shig tiim comment uldeedeg zuil web-d maani mash heregtei bna. kode ni bgaa l daa gehdee yaj bichsen zuilee delgetsen deer gargaha meddegguiee. baaz baiguulahguigeer mash marhan shiidej boloh uu? hevee bolohgui bol yaaj hiih ve? tuslaach!!!
    barag anhan shatnii medegdehuuntei bgaa.angiinhan angiin web hii geed barag hucheer shahuu avsan yum.itgeliig ni aldaj bolohgui bdag. hmtl css photoshop geed uunees tsaag medeg yum alga bna ooo.
    nadruu mail bichij tuslaarai. psl… nnzzoo@yahoo.com

  1. No trackbacks yet.