سؤال

كيف يمكنني الحصول على بيانات التعريف / القيود (المفتاح الأساسي و "Null المسموح به" على وجه الخصوص) لكل عمود في جدول SQLite V2.8 باستخدام PHP5 (مثل mysql_fetch_field for mysql)؟

sqlite_fetch_column_types (OO: $db->fetchColumnTypes) يحصل فقط على اسم العمود والنمط الخاص به:
http://dk.php.net/manual/en/function.sqlite-fetch-column-types.php.

sqlite_master لديه المعلومات - ولكن ليس كمتغير. مثال:
SELECT name FROM SQLITE_MASTER;

... sqlite_master فقط يخرج صفيف مع هذا الهيكل (v2.8):

[type] => table
[name] => foo
[tbl_name] => foo
[rootpage] => 3
[sql] => CREATE TABLE foo ( id INTEGER PRIMARY KEY, name CHAR(255) )

(وما هو "rootpage"؟)

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

المحلول

اضطررت للقيام بذلك لتنفيذ describeTable() طريقة SQLite عندما عملت في إطار Zend. لا يوجد لديه أي وسيلة للحصول على معلومات مفصلة عن البيانات الوصفية.

ما فعلته هو تشغيل استعلام SQLite التالي:

PRAGMA tableinfo( <tablename> );

يرى http://www.sqlite.org/pragma.html., تحت عنوان "Pragmas للاستعلام عن مخطط قاعدة البيانات".

تم إرجاع مجموعة النتائج التي تم إرجاعها من هذا الاستعلام أعمدة:

  • موقف العمود (عدد صحيح)
  • اسم العمود (سلسلة)
  • نوع البيانات (سلسلة)
  • nullable (0) مقابل عدم null (1)
  • القيمة الافتراضية (سلسلة)
  • المفتاح الأساسي (1)

يمكنك عرض رمز PHP عن طريق تنزيل إطار Zend وتبحث في الفصل Zend_Db_Adapter_Pdo_Sqlite, ، طريقة describeTable(). وبعد يمكنك أيضا عرض المصدر عبر الإنترنت عبر متصفح مختودع التعليمات البرمجية في Framework.zend.com (على الرغم من أنه لا يعمل بشكل متكرر).

fwiw، هذا ليس مثل mysql_fetch_field(). وبعد ترجع هذه الطريقة البيانات الوصفية حول مجموعة النتائج، والتي قد لا تكون نفس الشيء مثل البيانات الوصفية حول جدول.

نصائح أخرى

مثال مقتطف رمز يعمل بالنسبة لي ... لتوضيح حل Bill Karwin (ليس محاولة للإجابة على سؤالي الخاص!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top