سؤال

أحاول تحميل ملف .pdf في قاعدة بيانات MySQL باستخدام PHP.

كل شيء جيد باستثناء محتويات الملف. بغض النظر عن الطريقة التي أبدو فيها محاولة الهروب من الأحرف الخاصة، يفشل الاستعلام دائما، ومعظمها مع "أمر غير معروف N".

لقد استخدمت Addslashes، mysql_real_escape_string، removeslashes إلخ.

هل لدى أي شخص أي أفكار حول كيفية الهروب من محتويات الملفات؟

شكرا جزيلا،

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

المحلول

لقد استخدمت التسلسل التالي من قبل، والذي يبدو أنه يعمل بشكل جيد، وسيقوم بتخزين أي بيانات في DB، بما في ذلك الصور، ملفات PDF، صفائف البيانات، إلخ ... :)

تخزين البيانات (يمكن أن تكون سلسلة، صفيف، كائن، إلخ)؛

أولا، قم بتشغيل البيانات إلى سلسلة مشفرة Base64

$strData = strtr(
             base64_encode(
               addslashes(
                 gzcompress( serialize($dataToStore) , 9)
                 )
               ) , '+/=', '-_,');

ثم قم بتخزين تلك البيانات السلسلة في DB ...


استرجاع البيانات؛

استخراج بيانات السلسلة من DB

فك شفرة البيانات مرة أخرى إلى ما تريد (قد تحتاج إلى إجراء خطوة إضافية بعد هذا بناء على بيانات الإدخال، صفيف، الصورة، إلخ)

$returnData = unserialize(
                gzuncompress(
                  stripslashes(
                    base64_decode(
                      strtr($strDataFromDb, '-_,', '+/=')
                    )
                  )
                )
              );

ساعدني هذا بالتأكيد في تخزين ما كنت بحاجة لتخزينه في MySQL DB!

نصائح أخرى

لا أرى لماذا تريد تخزين ملف في قاعدة بيانات، لكنني أقترح عليك إلقاء نظرة على البيانات المعدة.

تخمين: قد تصادف أخطاء بسبب عدم التوافق بين مجموعات الأحرف. من المحتمل أن يكون PDF ملف ثنائي حتى تحتاج إلى التأكد من إعداد عمود DB للتعامل معه.

بجانب مشكلة الهروب، قد تقوم بالتشغيل في أخطاء "حزمة كبيرة جدا" إذا كان متغير نظام (MySQL) max_allowed_packet. تم ضبطها على قيمة "صغيرة".
باستخدام تمديد MySQLI، البيانات المعدة و mysqli_stmt :: send_long_data. يمكنك تجنب كلا المشاكل.

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