Проверьте, существует ли поле в SQLite, не извлекая их все - PullRequest
2 голосов
/ 20 октября 2011

Я пишу слой абстракции базы данных, который также абстрагирует некоторые из различных типов запросов.Один из них называется «field_exists» - его назначение должно быть достаточно понятным.

И я хочу реализовать это для SQLite.

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно использоватьодин запрос, который либо возвращает строку, подтверждающую, что поле существует, либо ни одного, если это не так.Таким образом, я не могу использовать подход PRAGMA.

Итак, какой запрос я могу использовать, чтобы проверить, существует ли поле в SQLite, которое удовлетворяет вышеуказанным критериям?

РЕДАКТИРОВАТЬ: Я должен добавить, что запрос должен быть в состоянии выполняться в коде PHP (с использованием PDO).

Кроме того, запрос должен выглядеть примерно так (который работает только с MySQL):

SHOW COLUMNS FROM table LIKE 'field'

Ответы [ 2 ]

4 голосов
/ 20 октября 2011

Попытка выбрать несуществующее поле вернет исключение, затем вы можете его перехватить и ничего не вернуть.

2 голосов
/ 20 октября 2011

Используйте команду .schema TABLENAME. Он сообщит вам команду, которая была создана для создания таблицы. За дополнительной информацией обращайтесь к документации командной оболочки SQLite .

Если у вас нет доступа к командной строке sqlite, вы всегда можете запросить таблицу sqlite_master. Допустим, вы хотите знать команду, использованную для создания таблицы MyTable. Вы выдадите это:

select sql from sqlite_master where name='MyTable';

Затем вы получаете команду sql, которая использовалась для создания таблицы. Затем просто пролистайте этот вывод и посмотрите, находится ли искомый столбец в команде, использованной для создания таблицы.

ОБНОВЛЕНИЕ 2:

На самом деле лучше, чем sql, который я разместил выше, вы можете использовать это:

PRAGMA table_info(*table_name*)

Это покажет вам все столбцы в данной таблице вместе с их типами и другой информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...