PHP - Creador de secuencias de comandos SQL

Lo que necesito:

Un generador de SQL Script eficiente para reemplazar el siguiente.

El fondo.

Un programa realmente simple pero necesito una forma más eficiente de producirlo, la razón por la que tengo este código es que necesito que otros desarrolladores puedan crear 'módulos' en mi plataforma y tablas de base de datos, pero los estoy bloqueando para que tengan acceso completo a la base de datos central, tienen que usar mi capa de acceso $api->database-> para acceder a sus tablas/datos. bloquea cualquier solicitud a la parte central de mi programa.

A continuación se muestra cómo espero usar las funciones para crear el script SQL Create Table. SqlField Class/function simplemente devuelve una matriz plana de los valores pasados, nada especial.

//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 );

A continuación se muestra la función actual que escribí rápidamente, pero se estaba complicando rápidamente y no está completa.

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;



}

preguntado el 03 de mayo de 12 a las 08:05

SO no es un lugar donde la gente escribirá código para ti, es un lugar para hacer preguntas específicas de programación. -

Bastante justo, ¿hay una clase SQL disponible que haga algo similar?

Aunque no lo he probado, CodeIgniter proporciona algo similar. codeigniter.com/user_guide/database/forge.html -

gracias danneth, esto es básicamente lo que estoy buscando, ¡lo investigaré y aprenderé algo nuevo! -

@IEnumerable: hice una respuesta que puede aceptar si está satisfecho con ella como solución:

1 Respuestas

Aunque no lo he probado, CodeIgniter proporciona algo similar. http://codeigniter.com/user_guide/database/forge.html

(copiado del comentario)

contestado el 03 de mayo de 12 a las 09:05

lamento haber tardado tanto, salí a cenar, CodeIgniter es fantástico, escuché sobre él pero nunca lo usé. Definitivamente voy a revisar su código, ya que hay algunas cosas muy interesantes que suceden allí. - IEnumerable

Sin preocupaciones. Soy un gran admirador de CodeIgniter, me ha hecho la vida mucho más fácil en los últimos años. - Danneth

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.