Создание динамического PHP-кода на основе типов данных столбцов MySQL

Я разрабатываю инструмент, который создает классы PHP на основе таблиц в моей базе данных. Большая часть функциональности основана на данных из SHOW COLUMNS FROM $table . Каждый столбец обычно относится к переменной экземпляра в создаваемом новом классе.

Теперь у меня есть ситуация, когда пользователь переходит в «двенадцать» для переменной, связанной с столбцом типа INT, она не прерывается, но значение в базе данных становится равным 0.

Я бы хотел, чтобы класс возвращал false, указав, что UPDATE или INSERT не могут быть выполнены.

Какой подход вы бы порекомендовали для этого?

Теперь я пытаюсь построить массив имен столбцов, содержащий каждый столбец с числовым типом данных (INT, FLOAT и т. Д.). И когда пользователь пытается установить переменную, он проверяет, находится ли переменная в этом списке, а затем проверяет значение, заданное для определения, является ли это числом.

PHP 5.3.3 с использованием MySQLi

Я предполагаю, что любой столбец, который не является числовым, будет принимать текстовые данные.

Solutions Collecting From Web of "Создание динамического PHP-кода на основе типов данных столбцов MySQL"

Что вы просите, называется ORM. В PHP есть хорошие библиотеки ORM.

  1. доктрина
  2. приводить в движение
  3. Выход ORM
  4. Leap ORM для Kohana (я использую его)
  5. PHP Data Mapper

Кстати, я отвечаю на ваш вопрос.

Если какие-либо недопустимые данные установлены, вы можете выбросить исключение.

См. Образец.

 class MyTable extends DbTable{ function __set($var, $val){ switch($var){ case 'age': // age should be numeric type if(!is_numeric($val)){ throw new InvalidDataTypeException("$val of $var is not numeric"); } /// do other operation here ... ... // more cases } } } 

Моим подходом было бы для каждого поля создавать не только переменную для значения, но и функцию проверки.

Теперь у вас есть некоторые статические функции проверки, такие как MyClass::ValidateInt() , MyClass::ValidateFloat() и друзья, переменная функции проверки для поля INT будет иметь MyClass::ValidateInt , вызовите это при генерации SQL для обновления или вставки

Если вы хотите проверить ввод, возможно, вы можете интегрировать плагин jQuery Validate в свой класс ядра, который создает экземпляр базы данных.

Например, у вас есть столбец INT, с помощью SHOW COLUMNS вы можете установить, что этот столбец должен иметь нужный десятичный номер, чтобы никто не мог отправить форму, а затем вставить ее в базу данных, если она неверно проверена.

Сторонники пользовательского интерфейса могут сказать «принять двенадцать» и преобразовать его в «12».

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