我正在开发一个基于数据库中的表创建PHP类的工具。大多数功能都基于SHOW COLUMNS FROM $table
的数据。每列通常与正在创建的新类中的实例变量相关。
我现在的情况是,如果用户为与INT类型的列相关的变量传入“十二”,它不会失败,但数据库中的值变为0.
我希望课程返回false,以确定UPDATE
或INSERT
无法完成。
您会为此推荐什么方法?
我现在正在尝试的是构造一个包含每个具有数字数据类型(INT,FLOAT等)的列的列名数组。当用户尝试设置变量时,它会检查该变量是否在此列表中,然后检查所设置的值以确定它是否为数字。
PHP 5.3.3使用MySQLi
我假设任何非数字的列都会接受文本数据。
答案 0 :(得分:3)
你在问什么叫做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
}
}
}
答案 1 :(得分:1)
我的方法是每个字段不仅要创建值的变量,还要创建验证函数的变量。
现在有一些静态验证函数,例如MyClass::ValidateInt()
,MyClass::ValidateFloat()
和朋友,INT
字段的验证函数变量将MyClass::ValidateInt
,在生成SQL时调用它用于更新或插入
答案 2 :(得分:0)
如果要验证输入,也许可以将jQuery Validate插件集成到创建数据库实例的内核类中。
例如,您有一个INT列,使用SHOW COLUMNS可以确定此列必须具有必需的十进制数,因此没有人可以提交表单,如果未正确验证则无法将其插入数据库
答案 3 :(得分:0)
UI拥护者可能会说接受“十二”,并将其转换为“12”。
从编程的角度来看,如果必须在函数的当前范围之外指出失败,处理此问题的典型方法是引发异常并让调用者处理这种情况。