انتقل إلى محتوى الدرس

Reusing Statements for Batch Inserts إدراج سجلات متعددة بإعادة تنفيذ الاستعلام

أدرج السجلات المفردة والمتعددة في MySQL عبر الاستعلامات المحضرة، واسترجع المعرف التلقائي بـ lastInsertId وعالج القيم المكررة.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

عند إدراج عدة سجلات داخل حلقة تكرار، استدعِ $pdo->prepare() مرة واحدة فقط خارج الحلقة، ونفذ $stmt->execute($row) داخل الحلقة.

  • تحضير جملة SQL مرة واحدة يتيح لمحرك قاعدة البيانات تحليل الاستعلام وبناء خطة التنفيذ مرة واحدة فقط.
  • في كل دورة داخل حلقة foreach يتم إرسال القيم الجديدة فقط دون إعادة تحليل نص الاستعلام.
  • تجنب استدعاء $pdo->prepare() داخل الحلقة لأن ذلك يكرر عبء التحليل مع كل سجل.

استدعاء prepare() مرة واحدة قبل حلقة foreach يدرج الوسوم الثلاثة بكفاءة عالية.

PHP
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE tags (id INTEGER PRIMARY KEY, slug TEXT)');
$stmt = $pdo->prepare('INSERT INTO tags (slug) VALUES (:slug)');
foreach (['php-84', 'pdo-sql', 'security'] as $slug) {
    $stmt->execute(['slug' => $slug]);
}
$total = $pdo->query('SELECT COUNT(*) FROM tags')->fetchColumn();
echo "Total inserted tags: $total\n";