Проверьте тип переменной PHP по типу данных MYSQL - PullRequest
0 голосов
/ 08 марта 2012

Просто интересно, есть ли какой-нибудь класс, функция или идея о том, как проверять конкретное значение / переменную по типу данных mysql.

У нас в PHP есть is_int () is_string () is_float () и т. Д. И т. Д. Но у нас их нет все. Или мы? Какой-нибудь шпаргалка? Есть мысли?

EDIT: Дело в основном:

  • Найдите массив значений (например, из CSV).
  • Я знаю, что за таблица, и имею всю информацию о столбцах (с типом данных хорошо) (с adodb).
  • Просто проверьте, вписывается ли каждое значение в определенный столбец ...

1 Ответ

1 голос
/ 08 марта 2012

Если данные поступают из файла CSV, вы должны помнить, что все значения будут строками (даже числовые строки по-прежнему имеют строковый тип).

Таким образом, вы не можете использовать is_int() / is_float() / и т. Д., Потому что это говорит вам только о типе или переменной. Вы можете использовать is_numeric() для проверки значения, но это позволит использовать такие вещи, как экспоненциальная запись, например "+ 0123.45e6". Иногда ctype_digit() может быть полезно для проверки целых чисел по этой причине, так как он будет позволять присутствовать только числам 0-9 в строке, чтобы он возвращал true.

Регулярные выражения также можно использовать для определения типов данных на основе шаблонов, но при работе с большими наборами данных нужно следить за повышением производительности. С точки зрения производительности почти всегда рекомендуется использовать семейство функций preg_ вместо функций ereg.

Если вы проверяете такие вещи, как типы ENUM или SET, вам, вероятно, потребуется создать массив, содержащий допустимые значения (или извлечь их с помощью запроса), а затем сравнить их с помощью in_array().

Для полей CHAR / VARCHAR вы можете проанализировать определение столбца, а затем проверить, соответствует ли длина значения ограничениям.

Если тип NULL разрешен в любом из ваших столбцов, вам также необходимо проверить это (и, возможно, сопоставить пустые значения или строку «NULL» с фактическим значением NULL).

Если вы действительно хотите избежать этих значений, изучите использование подготовленных операторов и расширения PDO (объекты данных PHP). Это позволяет MySQL правильно экранировать данные в зависимости от типа. (Вы также можете использовать подготовленные операторы с MySQLi.)

Если вы ищете конкретные типы данных и способы их идентификации, возможно, вы захотите отредактировать свой вопрос, чтобы упростить более полные ответы.

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