سؤال

لدي بيان إدراج كبير جدا شيء مثل

INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));

كيف أقوم بإعداد الاستعلام لـ MySQL. إنه وقت طويل جدًا للقيام بذلك يدويًا. يتضمن عروض أسعار مزدوجة حتى لا يمكنني استخدام وظيفة php mysql_real_escape_string ()

هل كانت مفيدة؟

المحلول

لماذا تريد إدراج جميع السجلات ببيان واحد؟ يمكنك استخدام عبارة معدّة: إدراج في القيم متعددة الوسائط (اسم الملف ، Regex ، Flag) (؟ ،؟ ،؟) ؛

و A-loop لإدراج السجلات واحدة تلو الأخرى.

أنا لست مبرمجًا لـ PHP ، لكن الرمز قد يبدو مثل هذا (الأجزاء مأخوذة من http://php.net/manual/en/pdo.preped-statements.php):

$stmt = $dbh->prepare("INSERT INTO multimedia (filename, regex, flag) VALUES (:filename, :regex, :flag)");
$stmt->bindParam(':filename', $filename);
$stmt->bindParam(':regex', $regex);
$stmt->bindParam(':flag', $flag);

for ( $i = 1; $i <= ...; $i++) {
    $filename = ...
    $regex = ...
    $flag = ...

    $stmt->execute();
}

باستخدام عبارة معدّة ، يقوم DBMs فقط بتجميع SQL مرة واحدة ، كما هو الحال مع بيان SQL الخاص بك. للتأكد من إدراج جميع السجلات أو عدم وجودها (إذا كنت بحاجة إلى مثل هذا التأكيد على أي حال) ، استخدم معاملة.

علاوة على ذلك ، فإن هذا من شأنه أن يحل مشكلتك الهاربة ، حيث لا تحتاج إلى وضع القيم في سلسلة. تحدد السلسلة لبيان معد فقط SQL "قالب".

نصائح أخرى

إذا تم تخزين بياناتك في ملف منفصل فاصلة ، فيمكنك استخدامها LOAD DATA INFILE استفسار

عينة من هذه البيانات يمكن أن تساعد.

يمكنك تجربة هذه الطريقة لتنفيذ إدراج متعددة في استعلام واحد ...

$sql = "INSERT INTO users (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22)";

mysql_query( $sql);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top