شرح صفوف ومحتوى الفقرة
اختر نمط الإدراج في PDO بناءً على عدد السجلات ومستوى الذرية المطلوب في ميزة تطبيقك.
- استخدم استعلاماً محضراً مفرداً مع
lastInsertId()لإرسال النماذج المعتادة مثل إنشاء حساب أو إضافة تعليق. - استخدم الاستعلام المحضر داخل معاملة
beginTransaction() / commit()عند إدراج فاتورة رئيسية مع عدة بنود تابعة لها. - التقط دائماً الرمز
"23000"في الجداول التي تحتوي على أعمدةUNIQUEبدلاً من الاعتماد فقط على استعلامSELECTمسبق.
تعمل المعاملات الموضعية (?) أيضاً بسلاسة عند تمرير مصفوفة مفهرسة إلى $stmt->execute([...]).
| النمط / الدالة | أفضل حالة استخدام | قيمة الإرجاع / السلوك | القاعدة الحرجة |
|---|---|---|---|
$stmt->execute($data) | Single safe row insert | bool (check rowCount()) | Prepare SQL with :named or ? |
$pdo->lastInsertId() | Get new AUTO_INCREMENT ID | string ID (cast to int) | Call on $pdo BEFORE commit() |
prepare() + Tx Loop | Batch insert (10–10,000 rows) | Single disk commit | prepare() outside loop; rollBack() on error |
$e->getCode() === "23000" | Duplicate UNIQUE key trap | 5-char SQLSTATE string | Enforce UNIQUE index in DB schema |
PHP
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE logs (id INTEGER PRIMARY KEY, msg TEXT)');
$stmt = $pdo->prepare('INSERT INTO logs (msg) VALUES (?)');
$stmt->execute(['User logged in']);
echo "ID: " . $pdo->lastInsertId() . " | Rows: " . $stmt->rowCount() . "\n";
خلاصة المعرفة ومحطة الانتقال
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
اختر نمط الإدراج في PDO بناءً على عدد السجلات ومستوى الذرية المطلوب في ميزة تطبيقك. استخدم استعلاماً محضراً مفرداً مع lastInsertId() لإرسال النماذج المعتادة مثل إنشاء حساب أو إضافة تعليق. استخدم الاستعلام المحضر داخل معاملة beginTransaction() / commit() عند إدراج فاتورة رئيسية مع عدة بنود تابعة لها. التقط دائماً الرمز "23000" في الجداول التي تحتوي على أعمدة UNIQUE بدلاً من الاعتماد فقط على استعلام SELECT مسبق.