0x01: اختبار ما إذا تم تثبيت PDO بنجاح
تشغيل الرمز التالي. إذا كانت المعلمة خاطئة ، فهذا يعني أنه تم تثبيت PDO. إذا لم يكن الكائن موجودًا ، فقم بتعديل ملف تكوين PHP php.ini وإلغاء التعليقات في php_pdo_yourssqlserverhere.extis السابقة.
نسخة الكود كما يلي:
$ test = new PDO () ؛
0x02: الاتصال بقاعدة البيانات
قم بتشغيل خادم Apache وتأكد من تشغيل الخادم وأن تثبيت PDO ناجح. ثم دعونا نتصل بقاعدة البيانات.
نسخة الكود كما يلي:
$ dsn = 'mysql: dbname = demo ؛ host = localHost ؛ port = 3306' ؛
$ username = 'root' ؛
$ password = 'passwore_here' ؛
يحاول {
$ db = new pdo ($ dsn ، $ username ، $ password) ؛
} catch (pdoException $ e) {
يموت ('لا يمكن الاتصال بقاعدة البيانات:
'. $ e) ؛
}
0x03: الاستعلام الأساسي
استخدام الاستعلام و EXEC في PDO يجعل قواعد بيانات الاستعلام بسيطة للغاية. إذا كنت ترغب في الحصول على عدد صفوف نتيجة الاستعلام ، فهذا مفيد جدًا لبيانات الاستعلام المحددة.
نسخة الكود كما يلي:
بيان $ = <<< SQL
يختار *
من "الأطعمة"
حيث "صحية" = 0
SQL ؛
$ foods = $ db-> Query ($ state) ؛
إذا كان الاستعلام أعلاه صحيحًا ، فإن $ Foods هو الآن كائن بيان PDO ، يمكننا من خلاله الحصول على النتائج التي نحتاجها وعدد مجموعات النتائج التي استفسرنا عنها في المجموع.
0x04: احصل على عدد الصفوف
إذا كنت تستخدم قاعدة بيانات MySQL ، فإن عبارة PDO تحتوي على طريقة RowCount للحصول على عدد الصفوف في مجموعة النتائج ، كما هو موضح في الكود التالي:
نسخة الكود كما يلي:
Echo $ Foods-> rowcount ؛
0x05: مجموعة نتائج اجتياز
يمكن اجتياز إحصاء PDO باستخدام عبارة FORECH ، كما هو موضح في الكود التالي:
نسخة الكود كما يلي:
foreach ($ foods-> fetchall () as $ food) {
صدى $ الطعام ['الاسم']. '
'
}
يدعم PDO أيضًا طريقة الجلب ، والتي تعيد فقط النتيجة الأولى.
0x06: الهروب من الأحرف الخاصة التي أدخلها المستخدم
يوفر PDO طريقة تسمى QUOTE ، والتي تسمح لأحرف خاصة بالهروب من الأماكن مع عروض الأسعار في سلسلة الإدخال.
نسخة الكود كما يلي:
$ input = هذا هو "A '' 'خطر جميل'
بعد النقل باستخدام طريقة الاقتباس:
نسخة الكود كما يلي:
$ db-> quote ($ input): "هذا هو/'s/'/'/' danger/'rous str/' ing '
0x07: exec ()
يمكن لـ PDO استخدام طريقة exec () لتنفيذ عمليات التحديث وحذفها وإدراجها. بعد التنفيذ ، سيعود عدد الصفوف المتأثرة:
نسخة الكود كما يلي:
بيان $ = <<< SQL
حذف من "الأطعمة"
حيث "صحية" = 1 ؛
SQL ؛
Echo $ db-> exec ($ بيان) ؛
0x08: بيان المعالجة المسبقة
على الرغم من أن طريقة EXEC والاستعلام لا تزال تستخدم على نطاق واسع ودعمها في PHP ، إلا أن الموقع الرسمي لـ PHP لا يزال يتطلب من الجميع استخدام عبارات المعالجة المسبقة لاستبدالها. لماذا؟ ويرجع ذلك أساسًا إلى: إنه أكثر أمانًا. لا تقوم عبارات المعالجة المسبقة بإدخال المعلمات مباشرة في الاستعلامات الفعلية ، والتي تتجنب العديد من حقن SQL المحتملة.
ومع ذلك ، لسبب ما ، لا تستخدم PDO بالفعل المعالجة المسبقة. إنه يحاكي طرق المعالجة المسبقة ، ويقوم بإدراج بيانات المعلمة في عبارات قبل نقل البيان إلى خادم SQL ، مما يجعل بعض الأنظمة عرضة لحقن SQL.
إذا كان خادم SQL الخاص بك لا يدعم المعالجة المسبقة حقًا ، فيمكننا حل هذه المشكلة بسهولة عن طريق تمرير المعلمات أثناء تهيئة PDO على النحو التالي:
نسخة الكود كما يلي:
$ db-> setAttribute (pdo :: attr_emulate_prepares ، false) ؛
هنا هو أول بيان قبل المعالجة:
نسخة الكود كما يلي:
$ بيان = $ db-> إعداد ('حدد * من الأطعمة حيث `name` =؟ و` Healthy` =؟') ؛
$ state2 = $ db-> إعداد ('حدد * من الأطعمة حيث `name` =: name and` healthy` =: healthy)' ؛
كما هو موضح في الكود أعلاه ، هناك طريقتان لإنشاء المعلمات والاسم والمجهول (لا يمكن أن يظهر في بيان واحد في نفس الوقت). ثم يمكنك استخدام BindValue لاكتب الإدخال الخاص بك:
نسخة الكود كما يلي:
بيان $-> bindvalue (1 ، 'cake') ؛
بيان $-> bindValue (2 ، صحيح) ؛
$ state2-> bindValue (': name' ، 'pie') ؛
$ its2-> bindValue (': Healthy' ، false) ؛
لاحظ أنه عند استخدام المعلمات المسماة ، يجب عليك تضمين القولون (:). يحتوي PDO أيضًا على طريقة BindParam ، والتي يمكن أن تربط القيم الرقمية بالرجوع ، أي أنها تبحث فقط عن القيم الرقمية المقابلة عند تنفيذ العبارة.
الشيء الوحيد المتبقي الآن هو تنفيذ بياننا:
نسخة الكود كما يلي:
بيان $-> execute () ؛
$ state2-> execute () ؛
// احصل على نتائجنا:
$ cake = $ بيان-> fetch () ؛
$ PIE = $ its2-> fetch () ؛
لتجنب استخدام شظايا رمز BindValue فقط ، يمكنك استخدام صفيف لإعطاء طريقة التنفيذ كمعلمة ، مثل هذا:
نسخة الكود كما يلي:
$ بيان-> تنفيذ (Array (1 => 'cake' ، 2 => true)) ؛
$ state2-> تنفيذ (Array (': name' => 'pie' ، ': Healthy' => false)) ؛
0x09: المعاملات
تتمثل المعاملة في تنفيذ مجموعة من الاستعلامات ، ولكنها لا توفر تأثيرها على قاعدة البيانات. ميزة ذلك هي أنه إذا قمت بتنفيذ 4 عبارات إدراج مترابطة ، عندما يفشل المرء ، يمكنك التراجع بحيث لا يمكن إدراج البيانات الأخرى في قاعدة البيانات ، مما يضمن إدراج الحقول المترابطة بشكل صحيح. تحتاج إلى التأكد من أن محرك قاعدة البيانات الذي تستخدمه يدعم المعاملات.
0x10: ابدأ المعاملة
يمكنك ببساطة استخدام طريقة BeginTransaction () لبدء معاملة:
نسخة الكود كما يلي:
$ db-> beginTransaction () ؛
$ db-> intraction () ؛ // حقيقي!
ثم يمكنك متابعة تنفيذ عبارة تشغيل قاعدة البيانات الخاصة بك وإرسال المعاملة في النهاية:
نسخة الكود كما يلي:
$ db-> الالتزام () ؛
هناك أيضًا طريقة التراجع () مماثلة لـ MySqli ، لكنها لا تراجع عن جميع الأنواع (على سبيل المثال ، باستخدام جدول الإسقاط في MySQL) ، هذه الطريقة ليست موثوقة حقًا ، أوصي بمحاولة تجنب الاعتماد على هذه الطريقة.
0x11: خيارات مفيدة أخرى
هناك العديد من الخيارات التي يمكنك التفكير فيها. يمكن إدخالها كمعلمة رابعة عند تهيئة كائنك.
نسخة الكود كما يلي:
$ Options = Array ($ Option1 => $ value1 ، $ Option [..]) ؛
$ db = new pdo ($ dsn ، $ username ، $ password ، $ Options) ؛
PDO :: attr_default_fetch_mode
يمكنك اختيار نوع مجموعة النتائج التي ستعودها PDO ، مثل PDO :: fetch_assoc ، والتي ستتيح لك استخدام $ result ['column_name'] أو pdo :: fetch_obj ، والتي ستعيد كائن مجهول حتى يمكنك استخدام $ result-> column_name
يمكنك أيضًا وضع النتيجة في فئة معينة (نموذج) ، عن طريق تعيين وضع قراءة لكل استعلام فردي ، مثل هذا:
نسخة الكود كما يلي:
$ Query = $ db-> Query ('Select * from `foods`) ؛
$ foods = $ query-> fetchall (pdo :: fetch_class ، 'food') ؛
PDO :: ATTR_ERRMODE
لقد أوضحنا ذلك أعلاه ، لكن أولئك الذين يحبون Trycatch يحتاجون إلى استخدام: PDO :: Errmode_Exception. إذا كنت ترغب في رمي تحذير PHP لأي سبب من الأسباب ، فاستخدم PDO :: errmode_warning.
PDO :: attr_timeout
عندما تكون قلقًا بشأن وقت التحميل ، يمكنك استخدام هذه الخاصية لتحديد وقت مهلة لاستعلامك في ثوانٍ. لاحظ أنه إذا تجاوز الوقت الذي تم تعيينه في الوقت ، فسيتم طرح استثناء E_Warning الافتراضي ما لم يتم تغيير PDO :: ATTR_ERRMODE.