Я разрабатываю инструмент, который создает классы PHP на основе таблиц в моей базе данных. Большая часть функциональности основана на данных из SHOW COLUMNS FROM $table
. Каждый столбец обычно относится к переменной экземпляра в создаваемом новом классе.
Теперь у меня есть ситуация, когда пользователь переходит в «двенадцать» для переменной, связанной с столбцом типа INT, она не прерывается, но значение в базе данных становится равным 0.
Я бы хотел, чтобы класс возвращал false, указав, что UPDATE
или INSERT
не могут быть выполнены.
Какой подход вы бы порекомендовали для этого?
Теперь я пытаюсь построить массив имен столбцов, содержащий каждый столбец с числовым типом данных (INT, FLOAT и т. Д.). И когда пользователь пытается установить переменную, он проверяет, находится ли переменная в этом списке, а затем проверяет значение, заданное для определения, является ли это числом.
PHP 5.3.3 с использованием MySQLi
Я предполагаю, что любой столбец, который не является числовым, будет принимать текстовые данные.
Что вы просите, называется ORM. В PHP есть хорошие библиотеки ORM.
Кстати, я отвечаю на ваш вопрос.
Если какие-либо недопустимые данные установлены, вы можете выбросить исключение.
См. Образец.
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».
С точки зрения программирования, если вы должны указать отказ за пределами текущей области действия функции, типичный способ справиться с этим заключается в том, чтобы создать исключение и позволить вызывающему лицу обрабатывать ситуацию.