PHP/MySQL - Usando array_keys e implode para criar inserts no MySQL

Vimos em um artigo anterior uma técnica interessante para passar parâmetros para funções, classes ou métodos.

Hoje vamos a uma dica rápida utilizando o conceito acima mais as funções array_keys e implode do PHP para criar uma função que monta um insert para o MySQL.

O Codeigniter e outros frameworks possuem helpers que usam uma idéia parecida, ou seja, inserimos o nome de uma tabela e pares chave=>valor através de uma array e o helper cria a query e a executa no banco de dados.

Poderíamos fazer o procedimento utilizando foreach(), mas eu acho muito deselegante utilizá-lo no contexto em que estamos, além do que é melhor utilizar sempre funções internas do PHP (quando possível) do que fazê-las 'na mão', pois a função compilada é bem mais eficiente do que a interpretada.

Neste caso que estamos abordando talvez nem fizesse tanta diferença, pois usamos poucos parâmetros e chamamos três vezes as funções internas, mas serve como uma boa ilustração de uma maneira mais 'limpa' de codificar.

Vamos ao exemplo



function insert($param = Array())
{
$values = "'".implode("','",$param['data'])."'";
$keys = implode(",",array_keys($param['data']));

$qy = "
INSERT INTO
{$param['table']}
({$keys})
VALUES
({$values})
";

echo $qy;
}

insert(Array(
'table' => 'usr',
'data' => Array(
'usr_name' => 'usuario',
'pass' => 'minhasenha'
)
));



Devemos obter como saída:



INSERT INTO
usr (usr_name,pass)
VALUES
('usuario','minhasenha')

Explicando o código, implode("','",$param['data']) pega apenas os valores da array 'data' e os encadeia com ','. Como resultado teremos algo como usuario','minhasenha

Depois inserimos no início e no final da string como um todo aspas simples para fechar bem nossos valores 'usuario','minhasenha'. Assim temos a variável $values pronta.

Agora vamos às chaves. Para isto usamos implode(",",array_keys($param['data'])). Aqui array_keys retorna apenas as chaves da array, mas em forma de uma nova array com chaves padrão (0,1,2...).

Assim temos algo como Array('usr_name','pass'). Depois aplicamos novamente implode, para utilizar a mesma técnica que no caso de $values.

Disto nossa $keys resultante é usr_name,pass

O restante do código acredito ser trivial pois $qy recebe todas estas variáveis já tratadas. Para finalizar basta substituir echo $qy pela execussão da query mysql_query($qy).

Por hoje é isto

Comentários

Postar um comentário

Postagens mais visitadas deste blog

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()

MySQL - Clonando tabelas na linha de comando

PHP - Gerando arquivo em UTF-8 com fwrite() e utf8_encode()