مساعدة سلسلة الهروب MySQL
-
25-09-2019 - |
سؤال
لدي بيان إدراج كبير جدا شيء مثل
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);