基于MySQL列数据类型的动态PHP代码创建

时间:2012-01-25 17:22:59

标签: php mysql code-generation

我正在开发一个基于数据库中的表创建PHP类的工具。大多数功能都基于SHOW COLUMNS FROM $table的数据。每列通常与正在创建的新类中的实例变量相关。

我现在的情况是,如果用户为与INT类型的列相关的变量传入“十二”,它不会失败,但数据库中的值变为0.

我希望课程返回false,以确定UPDATEINSERT无法完成。

您会为此推荐什么方法?

我现在正在尝试的是构造一个包含每个具有数字数据类型(INT,FLOAT等)的列的列名数组。当用户尝试设置变量时,它会检查该变量是否在此列表中,然后检查所设置的值以确定它是否为数字。

PHP 5.3.3使用MySQLi

我假设任何非数字的列都会接受文本数据。

4 个答案:

答案 0 :(得分:3)

你在问什么叫做ORM。 PHP中有一些很好的ORM库。

  1. Doctrine
  2. Propel
  3. Outlet ORM
  4. Leap ORM for Kohana(我用它)
  5. PHP Data Mapper
  6. 顺便说一句,我回答你的问题。

    如果设置了任何无效数据,您可以抛出异常。

    查看样本。

    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”。

从编程的角度来看,如果必须在函数的当前范围之外指出失败,处理此问题的典型方法是引发异常并让调用者处理这种情况。