Ir para conteúdo

POWERED BY:

Arquivado

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

Spyder.RV

Tem como dar fetch de query mysql de todas as linhas de uma vez

Recommended Posts

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

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

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
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

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

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

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

Não da pra trabalhar com array bi-dimensional amigo Spyder.RV?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

×

Informação importante

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