Spyder.RV 0 Denunciar post Postado Agosto 3, 2011 Pessoal, Existe alguma maneira de fazer um fetch completo numa query mysql? Ou sempre tem que fazer um loop e ir dando fetch linha por linha? Compartilhar este post Link para o post Compartilhar em outros sites
Adson aquino 2 Denunciar post Postado Agosto 3, 2011 Amigo desculpa mais não endenti a dúvida, poderia ser mais claro. Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Agosto 3, 2011 Olá! Até onde sei, o fetch, só acontece no loop, que é quando ele realiza a depuração das informações... Talvez o que possa te ajudar, é uma alteração na query... Explica melhor o que você tem por objetivo, que podemos chegar numa boa saída! Compartilhar este post Link para o post Compartilhar em outros sites
Spyder.RV 0 Denunciar post Postado Agosto 3, 2011 Olá! Até onde sei, o fetch, só acontece no loop, que é quando ele realiza a depuração das informações... Talvez o que possa te ajudar, é uma alteração na query... Explica melhor o que você tem por objetivo, que podemos chegar numa boa saída! Queria ver se tem acelerar o processo. Trabalho com retorno json vi ajax... aí pra gerar o objeto json eu tenho que percorrer a consulta fazendo fetch linha a linha e adicionando essa linha num array... e após o loop uso o json_encode() pra gerar o objeto. Cara... se o resultado do loop é um array com todas as linhas da consulta, não seria mais facil conseguir gerar um array direto da consulta que refletisse todas as linhas? Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Agosto 3, 2011 Cara... se o resultado do loop é um array com todas as linhas da consulta, não seria mais facil conseguir gerar um array direto da consulta que refletisse todas as linhas? Cara, você já pensou em criar uma view da sua consulta?! Pode funcionar quase que da mesma maneira... O fetch em si, só funciona em loop, e é graças a isso que podemos verificar possíveis falhas nos dados... O que você pode tentar é separar o gerador do fetch, para assim o gerador pegar o array inteiro, porém não garanto que isso funcione 100%. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Agosto 3, 2011 Não entendi sua dúvida, defina o que você quer fazer exatamente. Compartilhar este post Link para o post Compartilhar em outros sites
Spyder.RV 0 Denunciar post Postado Agosto 3, 2011 Acho que um pequeno exemplo pode facilitar: Então... o código abaixo retorna os resultados em formato JSON... e já é beeem limp e pequeno... <?php require_once('includes/conn.php'); $nome = mysql_real_escape_string($_POST['nome']); $consulta = mysql_query("SELECT * FROM membros WHERE nome LIKE '%$nome%';"); $dados = array(); while($linha = mysql_fetch_assoc($consulta)) $dados[] = $linha; if(count($dados) <= 0) $retorno['status'] = false; else{ $retorno['status'] = true; $retorno['registros'] = $dados; } echo json_encode($retorno); ?> Minha questão é: Se a cada linha do fetch gera um array/linha... que é adicionada em outro array... e que ao final, esse array é codificado pra JSON, e não é feita nenhuma manipulação adicional aos dados de cada linha. Então não seria mais "limpo" ainda se o resultado da consulta fosse já um array completo com todas as linhas? Por isso estou pesquisando pra ver se existe algum meio de implementar isso sem o loop do fetch linha a linha. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Agosto 3, 2011 Olha com o mysql_, eu não sei se tem, mas com o PDO, tem o método fetchAll que retorna todas as linhas da tabela em forma de array. Além do mais, essas funções mysql_ no PHP6 vai sair, então de qualquer forma, você vai ter que usar um MySQLi ou PDO. Compartilhar este post Link para o post Compartilhar em outros sites
Spyder.RV 0 Denunciar post Postado Agosto 3, 2011 Olha com o mysql_, eu não sei se tem, mas com o PDO, tem o método fetchAll que retorna todas as linhas da tabela em forma de array. Além do mais, essas funções mysql_ no PHP6 vai sair, então de qualquer forma, você vai ter que usar um MySQLi ou PDO. Hum... maravilha... vou verificar... no casdo o fetchAll só existe no PDO? ou tem algo semelhante no mysqli ? Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Agosto 3, 2011 Tem sim amigo, dê uma olhada na documentação do MySQLi, veja também a informação que você procura http://www.php.net/manual/en/mysqli-result.fetch-all.php mas isso só vai funcionar, se você estiver usando native driver. Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Agosto 3, 2011 Não da pra trabalhar com array bi-dimensional amigo Spyder.RV? Compartilhar este post Link para o post Compartilhar em outros sites
Spyder.RV 0 Denunciar post Postado Agosto 3, 2011 Não da pra trabalhar com array bi-dimensional amigo Spyder.RV? Periscuelo, dá na mesma... o formato do array não importa... o que importa é o processo de geração do array, que no caso do exemplo vem do loop para fazer o fetch linha a linha... Acho que o exemplo que o amigo Andrey Knupp citou do fetchAll vai dar certo... ainda não tive como testar, mas vejo isso logo logo. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Agosto 3, 2011 Bem, talvez eu possa te adiantar quanto a isso, veja: andrey@andrey:~$ rm -rf /var/www/~ andrey@andrey:~$ cd /var/www/ andrey@andrey:/var/www$ ls andrey@andrey:/var/www$ cd ~ andrey@andrey:~$ sudo vim /var/www/index.php 1 <?php 2 $PDO = new PDO( 'mysql:host=localhost;dbname=teste' , 'root' , '*' ); 3 $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 4 $prepare = $PDO->prepare( 'SELECT * FROM `clientes`' ); 5 if( $prepare->execute() ){ 6 echo json_encode( $prepare->fetchAll( PDO::FETCH_ASSOC ) ); 7 } ~ ~ ~ ~ ~ ~ ~ :wq! andrey@andrey:~$ mysql -u root -p Enter password: ******************** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 36 Server version: 5.1.49-1ubuntu8.1 (Ubuntu) Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create schema teste; Query OK, 1 row affected (0.02 sec) mysql> use teste; Database changed mysql> create table clientes( -> codigo smallint( 6 ) auto_increment, -> nome varchar( 16 ) not null, -> sobrenome varchar( 24 ) not null, -> primary key( codigo ) -> )engine = myisam row_format = default; Query OK, 0 rows affected (0.07 sec) mysql> insert into clientes values( null, 'Andrey', 'Knupp Vital' ), ( null, 'Rogério', 'Silva Gomes' ), ( null, 'Renato', 'Siqueira Novato' ); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 andrey@andrey:~$ php -f /var/www/index.php [ {"codigo":"1","nome":"Andrey","sobrenome":"Knupp Vital"}, {"codigo":"2","nome":"Rog\u00e9rio","sobrenome":"Silva Gomes"}, {"codigo":"3","nome":"Renato","sobrenome":"Siqueira Novato"} ] andrey@andrey:~$ Compartilhar este post Link para o post Compartilhar em outros sites
Spyder.RV 0 Denunciar post Postado Agosto 4, 2011 Andrey, valeu mano!!!! M.a.r.a.v.i.l.h.o.s.o.!!!! Era isso mesmo que eu queria... E parabéns pelo código também... ficou muito elegante e simples... Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Agosto 4, 2011 Opa, era só pra você ter uma idéia mesmo, ver como trabalha com o PDO, etc .. Compartilhar este post Link para o post Compartilhar em outros sites
Spyder.RV 0 Denunciar post Postado Agosto 4, 2011 Beleza... achei muito interessante... principalmente a questão de prepare; é do PREPARE STATATMENT né? Se não estou enganado, vi alguma coisa por ai na internet que diz que se usar o prepare não precisa nem preocupar com escapar texto pra se prevenir de sql injection...é verdade? Compartilhar este post Link para o post Compartilhar em outros sites