【发布时间】:2012-05-03 07:05:34
【问题描述】:
我需要什么:
一个高效的 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;
}
【问题讨论】:
-
SO 不是人们为您编写代码的地方,而是提出特定编程问题的地方。
-
公平地说,有没有一个可用的 SQL 类可以做一些类似的事情
-
虽然我自己没有尝试过,但 CodeIgniter 提供了类似的东西。 codeigniter.com/user_guide/database/forge.html
-
感谢 danneth,这基本上就是我正在寻找的东西,我会研究它并学习新的东西!
-
@IEnumerable:我做了一个回答,如果您对它作为解决方案感到满意,您可以接受
标签: php mysql sql performance function