Jump to content
Fórum Script Brasil
  • 0

Gerador de código SQL a partir de um Form!


Rogério Kleinkauf

Question

Olá pessoal, este é meu primeiro post neste forum, gostaria de compartilhar com vocês esta função que desenvolvi que vem facilitado e muito minha vida, lembrando que estou aberto a criticas, sugestões, correções e implementações no código.

Trata-se de uma função de chamada de geraSql que recebe como parametros

1º O tipo da query. ("INSERT", "UPDATE","DELETE","CREATE");

2º O nome da tabela.

3º Array bidimensional com o nome do campo da tabela e o valor a ser inserido, no caso consigo esse valor través de um $_POST ou até mesmo $_GET.

4º Nome da chave primária na tabela sem o prefixo. *usado somente no UPDATE e DELETE.

5º Valor da chave primária. *usado somente no UPDATE e DELETE.

*Atualmente ele não trata de forms com inputs do tipo FILE.

Implementações são sempre bem vindas.

function geraSql($tipo,$tabela,$array,$chaveprimaria="id",$valorprimaria=null){
        $prefixo = substr($tabela,0,3)."_";
        if(is_array($array)){
            $array = array_diff_key($array,array('submit_x' => 0,'submit_y' => 0,'submit' => 0,'x' => 0,'y' => 0));
            $ultima_chave = end(array_keys($array));
            switch($tipo){
                case "INSERT":
                    $sql = "INSERT INTO tb_".$tabela."(";
                    foreach($array as $chave => $valor){
                        $sql .= $prefixo.strtolower($chave);
                        if($ultima_chave == $chave){
                            $sql .= ")";
                        }else{
                            $sql .= ",";
                        }
                    }
                    $sql .= " VALUES (";
                    foreach($array as $chave => $valor){
                        $sql .= "'".$valor."'";
                        if($ultima_chave == $chave){
                            $sql .= ")";
                        }else{
                            $sql .= ",";
                        }
                    }
                    $sql .= ";";
                break;
                case "UPDATE":
                    $sql = "UPDATE tb_".$tabela." SET ";
                    foreach($array as $chave => $valor){
                        $sql .= $prefixo.strtolower($chave)." = '".$valor."'";
                        if($ultima_chave <> $chave){
                            $sql .= ",";
                        }
                    }
                    $sql .= " WHERE ".$prefixo.$chaveprimaria." = '".$valorprimaria."';";
                break;
                case "DELETE":
                    $sql = "DELETE FROM tb_".$tabela." WHERE ".$prefixo.$chaveprimaria." = '".$valorprimaria."';";
                break;
                case "CREATE":
                    $sql = "CREATE TABLE IF NOT EXISTS tb_".$tabela." ( ";
                    $sql .= $prefixo.$chaveprimaria." int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, ";
                    foreach($array as $chave => $valor){
                        $sql .= $prefixo.strtolower($chave)." varchar(256)";
                        if($ultima_chave != $chave){
                            $sql .= ", ";
                        }
                    }
                    $sql .= ");";
                break;
            }
            return $sql;
        }else{
            script('Não é uma array');
        }
    }
Exemplo de uso em um form de insersão.
mysql_query(geraSql("CREATE","trabalho",$_POST));
mysql_query(geraSql("INSERT","trabalho",$_POST));
No caso ele gera o código SQL e já cria a tabela e logo na linha abaixo faz a insersão dos valores na tabela utilizando o mysql, para o PostgreSQL basta mudar o mysql_query para pg_query. Exemplo de uso em um form de atualização.
$codigo = (int) $_GET['codigo'];
mysql_query(geraSql("UPDATE","video",$_POST,"id",$codigo),$connection) or die(mysql_error());

O código ainda está bem crú e sem otimizações e se faz necessário varias modificações e implementações.

Obrigado.

Edited by Rogério Kleinkauf
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...