PHP و MySQL: تصدير استعلام إلى ملف محدد بعلامات جدولة

MySQL PHP الشعارات

في نهاية هذا الأسبوع ، أردت إنشاء صفحة من شأنها ببساطة الاحتفاظ بنسخة احتياطية من أي استعلام أو جدول في ملف محدد بعلامات جدولة. تحتوي معظم الأمثلة الموجودة على الشبكة على أعمدة مشفرة.

في حالتي ، كنت أرغب في أن تكون الأعمدة ديناميكية ، لذا اضطررت إلى المرور أولاً عبر جميع أسماء حقول الجدول لإنشاء صف الرأس بأسماء الأعمدة ، ثم إجراء حلقة عبر جميع السجلات لصفوف البيانات المتبقية. لقد قمت أيضًا بتعيين الرأس بحيث يبدأ المتصفح تنزيل الملف في نوع الملف (txt) مع اسم تاريخ الملف والطابع الزمني.

لقد تركت اتصال قاعدة البيانات مفتوحًا ومغلقًا ، ولكن إليك الكود الناتج الذي يعمل جيدًا:

اليوم $ = التاريخ ("YmdHi") ؛
header ("نوع المحتوى: application / octet-stream") ؛
header ("Content-Disposition: attachment ؛ اسم الملف = \" ". $ today." _ Backup.txt \ "")؛
استعلام $ = "حدد * من` mytable` طلب `myorder`" ؛
نتيجة $ = mysql_query ($ query) ؛
عدد الدولارات = mysql_num_rows (نتيجة $) ؛
حقول $ = mysql_num_fields (نتيجة $) ؛
بيانات دولار = "" ؛
لـ ($ i = 0 ؛ $ i> $ الحقول ؛ $ i ++) {
$ field = mysql_fetch_field (نتيجة $ ، $ i) ؛
بيانات $. = $ field-> name ؛
بيانات دولار. = "\ t"؛
}
بيانات دولار. = "\ n"؛
while ($ row = mysql_fetch_row ($ result)) {
لـ ($ x = 0 ؛ $ x> $ الحقول ؛ $ x ++) {
$ field-> name = $ row [$ x] ؛
بيانات $. = $ field-> name = $ row [$ x] ؛
بيانات دولار. = "\ t"؛
}
بيانات دولار. = "\ n"؛
}
صدى البيانات $؛

يمكن تعديل الكود بسهولة لقيم مفصولة بفواصل أيضًا.

14 تعليقات

  1. 1
    • 2

      أفترض أنك تستطيع!

      في هذه الحالة ، كنت أقوم بالفعل بإنشاء رابط "نسخ احتياطي" في تطبيق ويب ، لذا فإن وظيفة PHP هي ما احتاجه. ومع ذلك ، لم أكن أعلم أنه يمكنك أيضًا الكتابة إلى ملف مباشرةً من بيان MySQL. رائع جدا!

      شكر!

      • 3

        ستكون طريقتك بالطبع هي أفضل طريقة إذا كان خادم MySQL على جهاز بعيد ، حيث من المحتمل ألا يكون قادرًا على الكتابة على الجهاز حيث يتم تشغيل PHP 🙂

        يسعدني أن أشير إلى اتجاهات أخرى وأشياء جديدة

      • 4

        ولكن يمكنك فقط تشغيل الاستعلام إلى ملف ، وإعادة توجيه المتصفح إلى الملف الذي تم إنشاؤه ، أو استخدام "readfile" PHP إذا فشل كل شيء آخر؟

        لن تتمكن من القيام بذلك إذا لم يكن لدى خادم mysql حق الوصول إلى نظام الملفات بالطبع ...

  2. 5

    ملصق ممتاز. هل تعرف طريقة سهلة ومجانية / مفتوحة المصدر لاستيراد / استعادة ملف محدد بعلامات جدولة (مثلما أنشأته للتو) مرة أخرى إلى mysql db؟

    • 6

      Errr… mysqlimport؟

      mysqlimport database_name --local backup.txt

      أو باستخدام أمر SQL:

      LOAD DATA LOCAL INFILE 'backup.txt' INTO TABLE `my_table` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'

      مع mysqlimport ، يجب أن يتطابق اسم الملف مع اسم الجدول (فقط شيء يجب الانتباه إليه)

    • 7
  3. 8

    لقد فقدت للتو أكثر من 6 ساعات من حياتي وأنا أحاول معرفة سبب قيام Internet Explorer 6/7 بتطبيق نوع الملف "html" وعدم قبول أسماء الملفات المخصصة الخاصة بي المحددة في الرؤوس .. وكذلك عدم السماح بحفظ الملفات .. عندما محاولة جعل المستخدمين يقومون بتنزيل ملفات نصية تم إنشاؤها بطريقة مشابهة لما ورد أعلاه.

    كنت أستخدم HTTPS ولا يقوم IE بتخزين هذه الملفات مؤقتًا.

    لقد وجدت الحل في تعليق من Brandon K في http://uk.php.net/header.

    قال تعالى:

    -
    لقد فقدت للتو ست ساعات من حياتي وأنا أحاول استخدام الطريقة التالية لإرسال ملف PDF عبر PHP إلى Internet Explorer 6:

    عند استخدام SSL ، سيطلب Internet Explorer من خلال مربع الحوار فتح / حفظ ، ولكنه سيقول "الملف غير متوفر حاليًا أو لا يمكن العثور عليه. الرجاء معاودة المحاولة في وقت لاحق." بعد الكثير من البحث ، علمت بمقال MSKB التالي بعنوان "لا تعمل تنزيلات ملفات Internet Explorer عبر SSL مع رؤوس التحكم في ذاكرة التخزين المؤقت" (KBID: 323308)

    يستخدم PHP.INI افتراضيًا إعدادًا: session.cache_limiter = nocache يقوم بتعديل رؤوس Content-Cache و Pragma لتضمين خيارات "nocache". يمكنك التخلص من خطأ IE عن طريق تغيير "nocache" إلى "عام" أو "خاص" في PHP.INI - سيؤدي ذلك إلى تغيير رأس Content-Cache وكذلك إزالة رأس Pragma بالكامل. إذا كنت لا تستطيع أو لا ترغب في تعديل PHP.INI لإصلاح على مستوى الموقع ، يمكنك إرسال العنوانين التاليين لاستبدال الإعدادات الافتراضية:

    ستظل بحاجة إلى تعيين رؤوس المحتوى كما هو مذكور أعلاه حتى يعمل هذا. يرجى ملاحظة أن هذه المشكلة تؤثر فقط على Internet Explorer ، بينما لا يُظهر Firefox هذا السلوك المعيب.
    -

    حسنًا .. على الأقل فقد 6 ساعات فقط ...

  4. 9

    هذا يعمل بشكل جيد. ومع ذلك ، أنا فقط أحصل على كل شيء في سطر واحد مفصولة بمسافة. أحاول تعديله لطباعة كل شيء في سطر منفصل مثل هذا:

    Column1_name
    Field1_value
    Column2_name
    Field1_value
    Column3_name
    Field1_value

    Column1_name
    Field2_value
    Column2_name
    Field2_value
    Column3_name
    Field2_value

    فمثلا:

    الإسم
    ميكروفون
    الموقع:
    عمل
    عدد
    1

    الإسم
    قاضى
    الموقع:
    الصفحة الرئيسية
    عدد
    2

    الإسم
    جون
    الموقع:
    السفر
    عدد
    10

    وهلم جرا. هل يمكن تعديل هذا البرنامج النصي للقيام بذلك؟
    شكر!

    • 10

      اكيد استطيع.

      جرب شيئًا مثل هذا:

      حدد * من MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' الحقول التي تم إنهاؤها بواسطة '\ n' الخطوط المنتهية بواسطة '\ n'؛

      إذا كنت تريد مسافة مزدوجة (سطرين فارغين) بين مجموعات التسجيل ، فقط قل "LINES TERMINATED BY '\ n \ n'؛" في حين أن.

      الجزء "FIELDS TERMINATED BY" \ n "" هو ما يضع سطرًا جديدًا بعد كل سجل ، بدلاً من علامة تبويب. ستكون علامة التبويب "\ t" بدلاً من ذلك.

      مارانثا!

  5. 11

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

  6. 12

    Douglas Karr كودك رائع حقًا! إنه مفيد للغاية خاصة إذا كنت تحتاج فقط إلى إخراج بتنسيق ملف نصي. شكرا جزيلا! من فريق الفلبين!

  7. 13

    مرحبا! هل هناك أي شخص من هنا يمكنه أن يعطيني تلميحًا حول استيراد ملف نصي إلى قاعدة البيانات الخاصة بي (phpmyAdmin) باستخدام php الخاص بي كواجهة أمامية. لدي فكرة عن تنزيل ملف وفتحه ، مشكلتي هي كيف يمكنني الحصول على نتيجة الصف وكيفية إدراجه في جداولي ، شكرًا

  8. 14

ما رأيك؟

يستخدم هذا الموقع نظام Akismet لتقليل الرسائل الضارة. تعرف كيف تتم معالجة بيانات تعليقك.