Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tiago Souza Ribeiro

UPDATE SQL usando dados de dois arrays

Recommended Posts

Olá, estou desenvolvendo uma função aqui para facilitar as coisas, e ela simplesmente agiliza o processo do UPDATE do SQL, porém estou quebrando a cabeça para fazê-la funcionar. Preciso que a forma de uso seja a seguinte:

 

atualiza("nome dos campos separados por vírgula", "valores para os campos respectivamente", "condições para o WHERE");

 

Ex: atualiza("nome, pais", "Tiago, Brasil", "id='12'");

Nesse caso a função executaria mysqli_query("UPDATE perfil SET nome='Tiago', pais='Brasil' WHERE id='12'");

 

Penso que seria necessário o uso de arrays, mas não entendi como fazê-lo.

 

Alguém poderia ajudar por favor? ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

pesquise pela função implode(). só tome cuidado com as aspas que devem ser inseridas nos campos do tipo string (varchar, text etc)

 

Ah, valeu. Comecei a usar explode nessa semana agora (nunca tinha usado), mas não imaginei que a função do implode fosse fazer o contrário (ou não me lembrei que essa função existia). Isso resolverá, vlw ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, um jeito bem simples de fazer isso é da seguinte forma

 

Class DB{
  $param = array();
  $where = '';
  $tabela = '';

   public function update(){
     $updates = '';
     foreach($param as $campo => $valor){
        $updates .= "{$campo} = '{$valor}',";
      }
     $updates = substr($updates, 0, -1);
     $sql = "UPDATE {$this->tabela} SET {$updates} {$where}";
     return $sql;
   }
}

 

você chama

 

$db = new DB();
$db->tabela = 'user';
$db->param = array(
'nome' => 'Thiago',
'pais' => 'Brasil'
);
$db->where = "WHERE id = '12'";
echo $db->update();

 

o retorno seria:

 

UPDATE user SET nome = 'Thiago', pais = 'Brasil' WHERE id = '12'

 

só estou dando essa dica pois não vi a necessidade do uso de 2 arrays

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, um jeito bem simples de fazer isso é da seguinte forma

 

Class DB{
  $param = array();
  $where = '';
  $tabela = '';

   public function update(){
     $updates = '';
     foreach($param as $campo => $valor){
		$updates .= "{$campo} = '{$valor}',";
  	}
     $updates = substr($updates, 0, -1);
     $sql = "UPDATE {$this->tabela} SET {$updates} {$where}";
     return $sql;
   }
}

 

você chama

 

$db = new DB();
$db->tabela = 'user';
$db->param = array(
'nome' => 'Thiago',
'pais' => 'Brasil'
);
$db->where = "WHERE id = '12'";
echo $db->update();

 

o retorno seria:

 

UPDATE user SET nome = 'Thiago', pais = 'Brasil' WHERE id = '12'

 

só estou dando essa dica pois não vi a necessidade do uso de 2 arrays

 

Obrigado pelo retorno.

 

Poisé, eu ia usar array, mas n vou mais. Esse jeito seu é doidão, nem entendi direito, kkkk

Acho que vou fazer assim:

 

function update($field, $value, $where){
$fld = explode(',', $field);
$vle = explode (',', $value);
$count1 = count($fld);
$count2 = count($vle);
if($count1 == $count2){
while($i <= $count1){
mysqli_query("UPDATE profile SET ".$fld[$i].'='.$vle[$i].' '.$where);
$i++;
}
}
}

 

Antes de usar sua solução ae, quero tentar fazer a minha própria, ae caso não consiga, fico com a sua mesmo.

Acho algo de errado ae dentro do while, o que é?

 

No aguardo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiro de tudo parabéns pela iniciativa, é exatamente assim que se aprende.

 

bom o seu caso acontece que ele vai executar uma query para cada item que você tiver e o where sempre vai ser o mesmo item.

 

o seu retorno disso seria:

 

UPDATE user SET nome = 'Thiago' WHERE id = '12'
UPDATE user SET pais = 'Brasil' WHERE id = '12'

 

e assim sucessivamente é ai que se encontra o erro.

 

o jeito que eu propus a você é simples,

 

você tem uma variavel parametro que recebe um array

 

nesse mesmo array você já define o campo e o valor desse campo.

 

$param = array(
'campo' => 'valor',
'campo2' => 'valor2'
);

 

repare que no foreach eu faço

 

foreach($param as $campo => $valor) //a variável campo é o meu indice que eu define lá é campo e campo 2.

 

eu só uso esse foreach para retornar os meus dados que serão atualizados.

 

e no substr é por que sobra uma virgula a mais ai eu tiro ela.

 

do jeito que eu coloquei pra você a sua sql é só uma e será executada só 1 vez tomando menos tempo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw... E sobre as várias query's, isso pode impedir muuuuito na velocidade, ou é coisa de milissegundos? Sei que se a tabela tiver muitos registros, o where vai sair igual um doidão rodando tudo procurando a linha certa, mas isso é bem rápido, não?

 

É... olhando seu código agora eu entendi como ele funciona... eu acho. Nessa parte aqui, você diz que é assim que terei que usar a função? Se sim: eu to querendo simplificar, não complicar, kkk, se for assim, é melhor usar o mysqli_query puro mesmo auhsuahsa...

 

você chama

 

$db = new DB();
$db->tabela = 'user';
$db->param = array(
'nome' => 'Thiago',
'pais' => 'Brasil'
);
$db->where = "WHERE id = '12'";
echo $db->update();

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahuahuahuuahuhahahuaha

é assim mesmo o modo de uso.

 

mais se você parar para ler é bem simples

 

você cria o novo objeto que é a Class DB

 

depois você tem 3 atributos sendo eles a tabela os parametros e o where que é a condição.

 

depois você chama o método (a função) que é a update que retorna a SQL.

 

parece um pouco complicado mais na verdade é muito simples mesmo

 

em relação ao tempo se você for atualizar 10 dados vai exigir de mais e o que não entra mais na casa dos millisegundos.

 

e na minha função você pode alterar diversas tabela com o mesmo código assim reaproveitando sua estrutura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahuahuahuuahuhahahuaha

é assim mesmo o modo de uso.

 

mais se você parar para ler é bem simples

 

você cria o novo objeto que é a Class DB

 

depois você tem 3 atributos sendo eles a tabela os parametros e o where que é a condição.

 

depois você chama o método (a função) que é a update que retorna a SQL.

 

parece um pouco complicado mais na verdade é muito simples mesmo

 

em relação ao tempo se você for atualizar 10 dados vai exigir de mais e o que não entra mais na casa dos millisegundos.

 

e na minha função você pode alterar diversas tabela com o mesmo código assim reaproveitando sua estrutura.

 

$db = new DB();
$db->tabela = 'user';
$db->param = array(
'nome' => 'Tiago',
'pais' => 'Brasil'
);
$db->where = "WHERE id = '12'";
echo $db->update();

X

 

mysqli_query("UPDATE user SET nome='Tiago', pais='Brasil' WHERE id='12'");

 

aushuas. Até decorar esse seu ae... fica mais fácil ficar no padrão mesmo, além do mais, eu poderia até decorar, dificilmente mas decoraria, mas não é só eu que irei usar essa função, então, não sei dos outros desenvolvedores, mas acho que não ajudaria em nada, kkk.

E também, a função que estou desenvolvendo aqui não é bem apenas UPDATE, não falei pra não complicar mais ainda, kkk. A função altera dados no banco de dados de acordo o tipo com store($type, $fields, $data, $where);, sendo o $where opcional, ex: store("info", "maintenance, version", "true, 2.0"); Essa dae com $type = "info" seria a única que usaria UPDATE, as demais $types todas usam INSERT. Uso uma switch($type) pra definir o que cada um faz.

Ah, acabei de lembrar aqui, como o $type = "info" é a única que vai usar UPDATE, e na tabela onde vão ficar armazenados os dados desse $type só tem uma linha (são apenas configurações do site em um registro só), então não teria problema em usar meu método, já que são poucas as colunas, apenas 9, então não passaria de 9 querys, e essa parte da função só seria usada no painel de controle do site, não sendo necessária velocidade/perfomance lá, isso é só pros usuários, pro painel, funcionando é o que importa, kkk. *---*.

 

Mesmo assim, obrigado :D

Talvez vou colocar opção de escolher se o desejado é fazer um INSERT ou UPDATE com a função ae eu use parte desse código seu, faço uma adaptação, mas é pouco provável isso, já que ficaria praticamente a função mysqli_query original.

 

Denovo, obrigado ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu estava fazendo uma classe parecida com a sua.

 

depois eu posso te mostrar um exemplo.

 

a questão de outros desenvolvedores utilizar o seu código você pode documentar tudo.

 

depois te mando um MP com exemplo de minha classe e se você mandasse uma da sua também poderia até me ajudar pois estou com uma pequena dificuldade.

 

boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu estava fazendo uma classe parecida com a sua.

 

depois eu posso te mostrar um exemplo.

 

a questão de outros desenvolvedores utilizar o seu código você pode documentar tudo.

 

depois te mando um MP com exemplo de minha classe e se você mandasse uma da sua também poderia até me ajudar pois estou com uma pequena dificuldade.

 

boa sorte

 

Você falou em classe: eu nem uso classes, kkk, acho inúteis :S, até hoje não precisei delas, uso funções simples mesmo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.