0

我需要的:

一个高效的 SQL 脚本生成器来替换下面的。

的背景。

一个非常简单的程序,但我需要一种更有效的方法来生成它,我拥有此代码的原因是我需要其他开发人员能够在我的平台和数据库表上创建“模块”,但我阻止他们拥有完全访问权限对于核心数据库,他们必须使用我的 $api->database-> 访问层来访问他们的表/数据。它阻止对我程序核心部分的任何请求。

下面是我希望如何使用这些函数来构建 SQL 创建表脚本。SqlField 类/函数只返回传递的值的平面数组,没什么特别的。

//The structure of the params are..

//$fields[] = SqlField::create($f_name, $f_type, $null, $auto_inc, $is_pk, $is_unique);
$fields[] = SqlField::create('id', 'int(7)', 0, 1, 1, 1);

$sql = $sqlTable->createTable('MyTableName', $fields );

下面是我快速编写的当前函数,但它很快变得混乱并且不完整。

public function createTable($tableName, $fields = array()) {

    $sql="CREATE TABLE xmod_".$tableName." ( \r\n";
        $isinit = true;

        foreach($fields as $field) {

            $sql .= ($isinit)? "" : ", \r\n" ;

            $isinit = false;

            $sql .= "".$field[0]." ".$field[1]." ";

            if($field[2] == true) {
                $sql .= "NOT NULL ";
            }

            if($field[3] == true) {
                $sql .= "auto_increment ";
            }   



        }

        $isinit = true;

        //Work on the primary keys
        foreach($fields as $field) {



            if($field[4] == 1) {

                $sql .= ($isinit)? "" : ", \r\n" ;
                $isinit = false;

                $sql .= "PRIMARY KEY (".$field[0].")";
            }

        }

        $isinit = true;

        //Work on the unique fields
        foreach($fields as $field) {

            if($field[5] == 1) {

                $sql .= ($isinit)? "" : ", \r\n" ;
                $isinit = false;

                $sql .= "UNIQUE id (".$field[0].")";
            }


        }           

        $sql .= "\r\n )";


        return $sql;



}
4

1 回答 1

1

虽然我自己没有尝试过,但 CodeIgniter 提供了类似的东西。http://codeigniter.com/user_guide/database/forge.html

(从评论复制)

于 2012-05-03T08:42:58.967 回答