Ir para conteúdo
Fórum Script Brasil
  • 0

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


Rogério Kleinkauf

Pergunta

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.

Editado por Rogério Kleinkauf
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...