Ir para conteúdo

POWERED BY:

Arquivado

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

Andrey Knupp Vital

[Resolvido] class php ..

Recommended Posts

Galera , to tentando criar uma classe pra trabalhar com resultados no banco .. faz uns 3 dias que to tentando procurar uma solução pra isso

vo postar aqui pra ve se algem tem alguma ideia..

 

<?php
  class dbase{

  var $objName;
  var $varName;

  public function __construct(){
    mysql_connect(localhost,root,ababa);
    mysql_select_db(dbase);
  }

    public function query($query_text){
     $this->queryexec = mysql_query( $query_text );
     $this->result = mysql_free_result($this->queryexec);
     return $this;
     }


     public function fetchAll(){
     while($this->objName = mysql_fetch_array($this->queryexec)){
      return $this->objName;
     }
   }
 }
  $SQL = new dbase;
  $SQL->query("SELECT * FROM pedidos")->fetchAll();
?>

tpws . to tentando fazer com fluent interface ..

dai eu so chamo os objetos .. e faço a query ela ja fica com o fetch , pra quando eu quiser buscar o resultado so do um

echo $nome_da_var["campo_do_mysql"];//$nome_da_var onde estao o $SQL->query("")->fetchAll(); .. ai tpws $nome_da_var = $SQL->query("")->fetchAll()

algem tem uma ideia de como eu possa fazer isso , se tiverem postem aqui por favor , mesmo que seje inutiu ja e um adianto dependendo da

informação ..

 

o erro retornado atualmente e

 

Warning: mysql_fetch_array(): 3 is not a valid MySQL result resource in C:\xampp\htdocs\form\index.php on line 20

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes...

 

No seu código:

  public function __construct(){
    mysql_connect(localhost,root,ababa);
    mysql_select_db(dbase);
  }

Eu sei que não é a sua dúvida, mas vale a dica: se for string, use aspas.

Nesse seu caso, o interpretador busca pelas CONSTANTES localhost, root, ababa e dbase; provavelmente ele não encontra, porque não são constantes de fato, então ele exibe um E_NOTICE (que provavelmente está desabilitado na sua aplicação e você não vê); então ele as exibe como string...

 

Como você pode ver, o trabalho é maior, ou seja, é um processo mais lento. Prefira assim:

  public function __construct(){
    mysql_connect('localhost','root','ababa');
    mysql_select_db('dbase');
  }

Isso que você está fazendo não é OO, mas nem vou entrar nesse aspecto. Alguém deve vir aqui e te falar melhor sobre isso.

 

Vamos pra sua questão...

Abra o manual do PHP.

 

No seu código:

    public function query($query_text){
     $this->queryexec = mysql_query( $query_text );
     $this->result = mysql_free_result($this->queryexec);
     return $this;
     }

Você usou mysql_free_result().

 

Descrição (manual do PHP):

mysql_free_result() irá liberar toda a memória associada ao identificador de resultado result .

É isso mesmo que você quer fazer? Não vai mais precisar do recurso do resultado? Creio que vá...

 

O que ela retorna (manual do PHP):

Retorna TRUE em caso de sucesso ou FALSE em falhas.

É isso mesmo que você quer que $this->result contenha? TRUE/FALSE?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu sei , mais eu q tava na correria aqui com connect .. so pra testes mesmo ..

nao presiso usar free_result . a função fetchAll() tem que apenas pegar o resultado Do

$SQL->query() ..

alguma sugestão para solucionar isso .! ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirou o mysql_free_result()? Continua aparecendo o mesmo erro?

 

O seu fetchAll() só vai rodar o while uma única vez, já que você retorna algo dentro dele. O return encerra a execução do método...

Dá um var_dump() no $SQL->query("SELECT * FROM pedidos")->fetchAll() e cola a saída aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

com mysql_

<?php
class Db
{
public $query;

public function __construct()
{
	mysql_connect( 'localhost', 'root', '123' );
	mysql_select_db( 'inter' );
}

public function query( $sql )
{
	$this->query = mysql_query( $sql );
	if( !$this->query )
		throw new Exception( '<strong>Falhou a consulta:</strong> '.$sql.'<br /><strong>Motivo:</strong> '.mysql_error() );
	return $this;
}
public function num_rows()
{
	return mysql_num_rows( $this->query );
}

public function fetchAll()
{
	$arr = Array();
	while( $this->dados = mysql_fetch_object( $this->query ) )
	{
		$arr[] = $this->dados;
	}
	return $arr;
}
}
$sql = new Db();
try{
	$all = $sql->query( "SELECT * FROM usuario" )->fetchAll();

	echo 'Quantidade de linhas: '.$sql->num_rows();

	echo '<pre>';
	var_dump( $all );
	foreach( $all AS $usuario )
	{
		echo '<strong>ID</strong>: '.$usuario->id.' - <strong>User</strong>: '.$usuario->user.
			' - <strong>Pass</strong>: '.$usuario->pass,'<br />';
	}
}
catch( Exception $e ){
	echo $e->getMessage();
}

sugestão com mysqli (caso não tenha o mysqlnd instalado)

 

<?php
class Db extends mysqli
{
private $query, $num_rows;

public function __construct()
{
	return $this->connect( 'localhost', 'root', '123', 'inter' );   
}
public function query( $sql )
{
	$this->query = parent::query( $sql );
	if( !$this->query )
		throw new Exception( '<strong>Falhou a consulta:</strong> '.$sql.'<br /><strong>Motivo:</strong> '.$this->error );

	return $this;
}
public function num_rows()
{
	return $this->query->num_rows;
}
public function fetchAll()
{
	$arr = Array();
	while( $this->dados = $this->query->fetch_object() )
	{
		$arr[] = $this->dados;
	}
	return $arr;
}
}
$sql = new Db();
try{
	$all = $sql->query( "SELECT * FROM usuario" )->fetchAll();

	echo 'Quantidade de linhas: '.$sql->num_rows();

	echo '<pre>';
	var_dump( $all );
	foreach( $all AS $usuario )
	{
		echo '<strong>ID</strong>: '.$usuario->id.' - <strong>User</strong>: '.$usuario->user.
			' - <strong>Pass</strong>: '.$usuario->pass,'<br />';
	}
}
catch( Exception $e ){
	echo $e->getMessage();
}	

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi d boa .. vlw pela ajuda Willian ..

mais ainda nao entendi os resultados ...

 

tpws:

Quantidade de linhas: 1
array(1) {
 [0]=>
 object(stdClass)#2 (71) {
   ["codigo_cliente"]=>
   string(2) "10"
   ["cliente"]=>
   string(19) "Mercearia Tata Ltda"
   ["codigo_vendedor"]=>
   string(1) "1"
   ["vendedor"]=>
   string(4) "VAGO"
   ["cond_pagamento"]=>
   string(1) "0"
   ["prod7_tipo"]=>
   string(2) "PD"
   ["numero_pedido"]=>
   string(1) "2"
   ["produto2"]=>
   string(1) "2"
   ["quantidade2"]=>
   string(5) "10.00"
   ["preco2"]=>
   string(5) "10.00"
   ["produto17"]=>
   string(2) "17"
   ["quantidade17"]=>
   string(5) "10.00"
   ["preco17"]=>
   string(5) "10.00"
   ["produto18"]=>
   string(2) "18"
   ["quantidade18"]=>
   string(4) "1.00"
   ["preco18"]=>
   string(4) "0.00"
   ["produto3"]=>
   string(1) "3"
   ["quantidade3"]=>
   string(4) "0.00"
   ["preco3"]=>
   string(4) "0.00"
   ["produto4"]=>
   string(1) "4"
   ["quantidade4"]=>
   string(4) "0.00"
   ["preco4"]=>
   string(4) "0.00"
   ["produto5"]=>
   string(1) "5"
   ["quantidade5"]=>
   string(4) "0.00"
   ["preco5"]=>
   string(4) "0.00"
   ["produto33"]=>
   string(2) "33"
   ["quantidade33"]=>
   string(4) "0.00"
   ["preco33"]=>
   string(4) "0.00"
   ["produto7"]=>
   string(1) "7"
   ["quantidade7"]=>
   string(4) "0.00"
   ["preco7"]=>
   string(4) "0.00"
   ["produto8"]=>
   string(1) "8"
   ["quantidade8"]=>
   string(4) "0.00"
   ["preco8"]=>
   string(4) "0.00"
   ["produto9"]=>
   string(1) "9"
   ["quantidade9"]=>
   string(4) "0.00"
   ["preco9"]=>
   string(4) "0.00"
   ["produto10"]=>
   string(2) "10"
   ["quantidade10"]=>
   string(4) "0.00"
   ["preco10"]=>
   string(4) "0.00"
   ["produto14"]=>
   string(2) "14"
   ["quantidade14"]=>
   string(4) "0.00"
   ["preco14"]=>
   string(4) "0.00"
   ["produto11"]=>
   string(2) "11"
   ["quantidade11"]=>
   string(4) "0.00"
   ["preco11"]=>
   string(4) "0.00"
   ["produto13"]=>
   string(2) "13"
   ["quantidade13"]=>
   string(4) "0.00"
   ["preco13"]=>
   string(4) "0.00"
   ["produto15"]=>
   string(2) "15"
   ["quantidade15"]=>
   string(4) "0.00"
   ["preco15"]=>
   string(4) "0.00"
   ["produto12"]=>
   string(2) "12"
   ["quantidade12"]=>
   string(4) "0.00"
   ["preco12"]=>
   string(4) "0.00"
   ["produto31"]=>
   string(2) "31"
   ["quantidade31"]=>
   string(4) "0.00"
   ["preco31"]=>
   string(4) "0.00"
   ["produto19"]=>
   string(2) "19"
   ["quantidade19"]=>
   string(4) "0.00"
   ["preco19"]=>
   string(4) "0.00"
   ["produto22"]=>
   string(2) "22"
   ["quantidade22"]=>
   string(4) "0.00"
   ["preco22"]=>
   string(4) "0.00"
   ["produto24"]=>
   string(2) "24"
   ["quantidade24"]=>
   string(4) "0.00"
   ["preco24"]=>
   string(4) "0.00"
   ["produto25"]=>
   string(1) "2"
   ["quantidade25"]=>
   string(4) "0.00"
   ["preco25"]=>
   string(4) "0.00"
   ["observacoes"]=>
   string(0) ""
 }
}
ID:  - User:  - Pass: 

como faço pra nao exibir em array nenhum , apenas os valores das colunas .. (sem nome da coluna , tipo) apenas o valor

 

tpws . ele ja monta o array dentro da função do fetchAll() ; pra toda vez que eu presisar ele ja tem todos resultados atribuidos ou seja

ele ja cria o array dentro do fetch pra quando eu for pegar o campo eu uso o echo["nome_campo"];

pq no caso

se eu uso na funcao ao inves de

mysql_fetch_object

eu uso

mysql_fetch_array

ele cria a base e o array , dai eu tenho que pegar o resultado assim

echo $all[0]["codigo_cliente"];

eu queria so o

$all["campo"]

desde-ja obrigado a ajuda .!

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja bem:

array(1) {
 [0]=>
 object(stdClass)#2 (71) {
   ["codigo_cliente"]=>

o resultado é um array, que contém um objeto na posição 0

 

para acessar, você fará:

echo $all[0]->codigo_cliente

 

só está 'dessa forma' pq o fetchAll(), começa a ser útil qndo você vai retornar várias linhas

se você só tiver que retornar uma unica linha, usa algo como:

	public function fetchAssoc()
{
	return mysql_fetch_assoc( $this->query );
}

$all = $sql->query( "SELECT * FROM usuario WHERE id=1" )->fetchAssoc();

 

 

 

no caso do fetchAll(), você precisa dessas posições, pq se não ficaria impossível retornar multiplas linhas, e é isso que o fetchAll() deve fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o fetch() que retorna uma unica eu tenho , um loop de for , nao resolveria o caso de tirar essas posicoes de [0] antes do resultado nao ?

 

a graça do negocio e fazer ele exibir os resultados sem as posiçoes de cada array com os resultados dos campos ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tô compreendendo cara..

 

assim, não faz sentido tirar as posições [0], [1].. pq o fetchAll() geralmente retorna multiplas linhas.

oque você pode fazer, para usar da forma que você quer é:

 

 

$cliente = $all[0];
echo $cliente['codigo_cliente']

e pronto.

ainda assim, 'não vi vantagem'. Se você não sabe previamente qntas linhas vai retornar, então não faz sentido usar da forma que você quer.

se você sabe que vai retornar apenas uma unica linha, use um fetch() simples

 

se pode retornar 1 linha ou várias, então o foreach() tá ai pra isso.

como no exemplo que postei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensa . quando voce roda um while . ele te retorna todos do banco .. e voce usa(fetch_array .. ex

 

while($blabla = mysql_fetch_array($query)){

echo $blabla["cliente"];

}

ele vai retornar todos os resultados que o while leu na tabela que eu situei na query

e retornar todos os resultados do campo cliente

 

tpws

 

Id Cliente

+--+ +-----+

|1 | |Jose |

|2 | |Mauro|

|3 | |Manga|

+--+ +-----+

 

dai eu quero so as dos Clientes de ex

ele vai retornar todos assim

 

Jose

Mauro

Manga

 

entao no echo $all["campo la da tabela"];

e retorna todos resultados encontrados daquele campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente para isso que tem o foreach() amigo!

 

o retorno que você usa no while() é um resource do banco

porém o retorno do fetchAll(), não é mais.. agora ele é um array.

 

ou você não usa o fetchAll(), e faz logo com o retorno do ->query

ou você usa o foreach():

 

                foreach( $all AS $usuario )
               {
                       echo '<strong>ID</strong>: '.$usuario->id.' - <strong>User</strong>: '.$usuario->user,'<br />';
               }

ou em array, como você quer:

                foreach( $all AS $usuario )
               {
                       echo '<strong>ID</strong>: '.$usuario['id'].' - <strong>User</strong>: '.$usuario['user'],'<br />';
               }

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao tem como montar o foreach dentro do fetchAll .. como se foçe simular um while so que sem posiçoes de linhas .. ?

 

e tipo o fetchAll() . nao e pra fechar exatamente uma linha inteira , e sim todas da tabela .

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá confuso isso.

nao tem como montar o foreach dentro do fetchAll .. como se foçe simular um while so que sem posiçoes de linhas .. ?

então use assim:

		$query = $sql->query( "SELECT * FROM usuario" );
	while( $dados = $query->fetchAssoc() )
	{
		echo $dados['user'],'<br />';
	}

se você quer colocar 'isso' dentro de um método, não faz sentido que ele se chame fetchAll().

mas sei lá, printUser()

	public function printUser()
{
	$html = '';
	while( $dados = $this->fetchAssoc() )
	{
		$html .= $dados['user'].'<br />';
	}
	return $html;
}

ai usaria assim:

		$query = $sql->query( "SELECT * FROM usuario" )->printUser();
	echo $query;

 

e tipo o fetchAll() . nao e pra fechar exatamente uma linha inteira , e sim todas da tabela .

??

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais ali no $query

ele ja ta definindo o campo ..

o campo tem que ser definido por min ..

 

tpws

ele roda o while , e distribui os campos da tabela .. tipo id , preco , mercadoria , entrega

 

e no echo eu pego o campo exato que eu presiso entendeu ?

 

[[[[TODOS RESULTADOS DESSE CAMPO QUE EU IDENTIFIQUEI NO "echo" ]]]]

Compartilhar este post


Link para o post
Compartilhar em outros sites

cada 'registro', cada 'usuario' é uma linha na tabela

cada 'dado', como ID, NOME, SENHA, é uma coluna da tabela

 

é só você fazer:

                $query = $sql->query( "SELECT * FROM usuario" );
               while( $dados = $query->fetchAssoc() )
               {
                       echo $dados['user'],'<br />';//aqui você escolhe a coluna que você quer exibir
               }

 

mas sei lá, se você quer algo mais 'bizzaro' ainda, pode fazer:

	public function printCol( $col )
{
	$html = '';
	while( $dados = $this->fetchAssoc() )
	{
		$html .= $dados[ $col ].'<br />';
	}
	return $html;
}

ai usa:

$query = $sql->query( "SELECT * FROM usuario" )->printCol( 'id' );

ou:

$query = $sql->query( "SELECT * FROM usuario" )->printCol( 'user' );

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

?

 

então qual é o 'problema' do:

public function printUser()

?

 

 

não tá fazendo o menor sentido oque você tá 'pedindo'..

para apenas uma linha:

	$sql = new Db();
$usuario = $sql->query( "SELECT * FROM usuario WHERE id=1" )->fetchAssoc();
echo 'ID: '.$usuario['id'],' - User: '.$usuario['user'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, a unica coisa que eu consigo imaginar que você queira fazer é algo assim:

 

<?php
class Db {
/**
 * @var resource
 */
private $_query;
/**
 * @var string
 */
private $_separador = null;
/**
 * @var bool
 */
private $_juntarCampos = false;

public function __construct() {
	mysql_connect ( 'localhost', 'root', '123' );
	mysql_select_db ( 'inter' );
}

public function query($sql) {
	$this->_query = mysql_query ( $sql );
	if (! $this->_query)
		throw new Exception ( '<strong>Falhou a consulta:</strong> ' . $sql . '<br /><strong>Motivo:</strong> ' . mysql_error () );
	return $this;
}

/**
 * Método que retorna a quantidade de linhas da consulta
 * 
 * @return int
 */
public function numRows() {
	return mysql_num_rows ( $this->_query );
}

/**
 * Método que define o separador entre os campos da tabela 
 * @param string $separador
 * @return Db - Fluent Interface 
 */
public function setSeparador($separador) {
	if ($this->_juntarCampos === false) {
		throw new Exception ( 'Você só pode definir um separador se você definir que os campos devem ser unidos.' );
	}
	$this->_separador = $separador;
	return $this;
}
/**
 * Método que define se deve ou não ser unidos todos os campos da tabela
 * @param bool $juntar
 * @return Db - Fluent Interface
 */
public function setJuntarCampos($juntar = true) {
	$this->_juntarCampos = ( bool ) $juntar;
	return $this;
}

/**
 * Método que retorna os dados da consulta
 * @return string|array
 */
public function fetchAll() {
	if ($this->_juntarCampos === true) {
		if ($this->_separador === null) {
			throw new Exception ( 'Você deve definir o separador para unir os campos.' );
		}
		$retorno = '';
		while ( $dados = mysql_fetch_array ( $this->_query ) ) {
			$retorno .= implode ( $this->_separador, $dados );
		}
	} else {
		$retorno = array ();
		while ( $dados = mysql_fetch_object ( $this->_query ) ) {
			$retorno [] = $dados;
		}
	}
	return $retorno;
}
}

$sql = new Db ();
try {
// vai retornar um array com todos os usuários
$all = $sql->query ( 'SELECT * FROM usuario' )->fetchAll ();
echo 'Array de objetos <br/><pre>';
print_r ( $all );
echo '</pre><br/ Vai retornar uma string com todos os valores dos usuários, independente dos campos que existirem: <br/>';
// vai retornar todas as linhas da consulta e todos os campos de cada linha, separados por <br/> 
echo $sql->query ( 'SELECT * FROM usuario' )->setJuntarCampos ()->setSeparador ( '<br/>' )->fetchAll ();
} catch ( Exception $e ) {
echo $e->getMessage ();
}

 

Execute este código pra ver se é isto que você está querendo. Se não for, aí definitivamente não entendi.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias Foi Exatamente Essa Linha

echo $sql->query ( 'SELECT * FROM pedidos' )->setJuntarCampos ()->setSeparador ( '<br/>' )->fetchAll ();

Exatamente Isso que eu tava querendo , nao da pra voce fazer tudo so em uma funçao so pra ficar o fetchAll() .. não?

 

mais ainda sim ele monta o array com posiçoes ... nao tem como montar sem posiçoes, pra ficar so o array

 

?

 

então qual é o 'problema' do:

public function printUser()

?

 

Porquê no printUser você ja definiu o campo que vai retornar no while ..

 

Ai galera ..

 

               public function fetchAll()
       {
               $arr = array();
               while( $this->dados = mysql_fetch_assoc( $this->query ) )
               {

                       $arr = $this->dados;
               }
               return $arr;
       }
       }

------Retorna------

Array ( [codigo_cliente] => 10 [cliente] => Mercearia Tata Ltda [codigo_vendedor] => 1 [vendedor] => VAGO [cond_pagamento] => 0 [prod7_tipo] => PD [numero_pedido] => 2 [produto2] => 2 [quantidade2] => 10.00 [preco2] => 10.00 [produto17] => 17 [quantidade17] => 10.00 [preco17] => 10.00 [produto18] => 18 [quantidade18] => 1.00 [preco18] => 0.00 [produto3] => 3 [quantidade3] => 0.00 [preco3] => 0.00 [produto4] => 4 [quantidade4] => 0.00 [preco4] => 0.00 [produto5] => 5 [quantidade5] => 0.00 [preco5] => 0.00 [produto33] => 33 [quantidade33] => 0.00 [preco33] => 0.00 [produto7] => 7 [quantidade7] => 0.00 [preco7] => 0.00 [produto8] => 8 [quantidade8] => 0.00 [preco8] => 0.00 [produto9] => 9 [quantidade9] => 0.00 [preco9] => 0.00 [produto10] => 10 [quantidade10] => 0.00 [preco10] => 0.00 [produto14] => 14 [quantidade14] => 0.00 [preco14] => 0.00 [produto11] => 11 [quantidade11] => 0.00 [preco11] => 0.00 [produto13] => 13 [quantidade13] => 0.00 [preco13] => 0.00 [produto15] => 15 [quantidade15] => 0.00 [preco15] => 0.00 [produto12] => 12 [quantidade12] => 0.00 [preco12] => 0.00 [produto31] => 31 [quantidade31] => 0.00 [preco31] => 0.00 [produto19] => 19 [quantidade19] => 0.00 [preco19] => 0.00 [produto22] => 22 [quantidade22] => 0.00 [preco22] => 0.00 [produto24] => 24 [quantidade24] => 0.00 [preco24] => 0.00 [produto25] => 2 [quantidade25] => 0.00 [preco25] => 0.00 [observacoes] => ) 

 

e eu puxo o resultado do jeito que eu quero ou seja assim

       $e =  $SQL->query("SELECT * FROM `pedidos`")->fetchAll();
       echo $e[cliente];

 

Agora , caso eu use em $arr ou colchete [] ficando assim

               public function fetchAll()
       {
               $arr = array();
               while( $this->dados = mysql_fetch_assoc( $this->query ) )
               {

                       $arr[] = $this->dados;
               }
               return $arr;
       }

 

Retorna

 

Array ( [0] => Array ( [codigo_cliente] => 10 [cliente] => 1 [codigo_vendedor] => 1 [vendedor] => 1 [cond_pagamento] => 1 [prod7_tipo] => 1 [numero_pedido] => 0 [produto2] => 0 [quantidade2] => 0.00 [preco2] => 0.00 [produto17] => 0 [quantidade17] => 0.00 [preco17] => 0.00 [produto18] => 0 [quantidade18] => 0.00 [preco18] => 0.00 [produto3] => 0 [quantidade3] => 0.00 [preco3] => 0.00 [produto4] => 0 [quantidade4] => 0.00 [preco4] => 0.00 [produto5] => 0 [quantidade5] => 0.00 [preco5] => 0.00 [produto33] => 0 [quantidade33] => 0.00 [preco33] => 0.00 [produto7] => 0 [quantidade7] => 0.00 [preco7] => 0.00 [produto8] => 0 [quantidade8] => 0.00 [preco8] => 0.00 [produto9] => 0 [quantidade9] => 0.00 [preco9] => 0.00 [produto10] => 0 [quantidade10] => 0.00 [preco10] => 0.00 [produto14] => 0 [quantidade14] => 0.00 [preco14] => 0.00 [produto11] => 0 [quantidade11] => 0.00 [preco11] => 0.00 [produto13] => 0 [quantidade13] => 0.00 [preco13] => 0.00 [produto15] => 0 [quantidade15] => 0.00 [preco15] => 0.00 [produto12] => 0 [quantidade12] => 0.00 [preco12] => 0.00 [produto31] => 0 [quantidade31] => 0.00 [preco31] => 0.00 [produto19] => 0 [quantidade19] => 0.00 [preco19] => 0.00 [produto22] => 0 [quantidade22] => 0.00 [preco22] => 0.00 [produto24] => 0 [quantidade24] => 0.00 [preco24] => 0.00 [produto25] => 0 [quantidade25] => 0.00 [preco25] => 0.00 [observacoes] => ) [1] => Array ( [codigo_cliente] => 10 [cliente] => Mercearia Tata Ltda [codigo_vendedor] => 1 [vendedor] => VAGO [cond_pagamento] => 0 [prod7_tipo] => PD [numero_pedido] => 2 [produto2] => 2 [quantidade2] => 10.00 [preco2] => 10.00 [produto17] => 17 [quantidade17] => 10.00 [preco17] => 10.00 [produto18] => 18 [quantidade18] => 1.00 [preco18] => 0.00 [produto3] => 3 [quantidade3] => 0.00 [preco3] => 0.00 [produto4] => 4 [quantidade4] => 0.00 [preco4] => 0.00 [produto5] => 5 [quantidade5] => 0.00 [preco5] => 0.00 [produto33] => 33 [quantidade33] => 0.00 [preco33] => 0.00 [produto7] => 7 [quantidade7] => 0.00 [preco7] => 0.00 [produto8] => 8 [quantidade8] => 0.00 [preco8] => 0.00 [produto9] => 9 [quantidade9] => 0.00 [preco9] => 0.00 [produto10] => 10 [quantidade10] => 0.00 [preco10] => 0.00 [produto14] => 14 [quantidade14] => 0.00 [preco14] => 0.00 [produto11] => 11 [quantidade11] => 0.00 [preco11] => 0.00 [produto13] => 13 [quantidade13] => 0.00 [preco13] => 0.00 [produto15] => 15 [quantidade15] => 0.00 [preco15] => 0.00 [produto12] => 12 [quantidade12] => 0.00 [preco12] => 0.00 [produto31] => 31 [quantidade31] => 0.00 [preco31] => 0.00 [produto19] => 19 [quantidade19] => 0.00 [preco19] => 0.00 [produto22] => 22 [quantidade22] => 0.00 [preco22] => 0.00 [produto24] => 24 [quantidade24] => 0.00 [preco24] => 0.00 [produto25] => 2 [quantidade25] => 0.00 [preco25] => 0.00 [observacoes] => ) )

 

Caso vocês perceberam , sem os colchetes , ele nao cria as posiçoes de linha no array ex

$e[linha][campo]

mais tambem nao retorna todos resultados do banco , ou seja so retorna uma linha

é e ai que esta meu problema .. quero que ele retorne todos os resultados do banco so que sem posiçoes de linha

creio que um loop na fetchAll() sem colchetes resolveria , o problema e que eu não tenho ideia de como fazer ..

algem me da uma luz aii ? :D

 

obrigado pela ajuda de todos ate o momento

 

Fewdox

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... Então, vamos ver o seguinte:

 

e eu puxo o resultado do jeito que eu quero ou seja assim

        
       $e =  $SQL->query("SELECT * FROM `pedidos`")->fetchAll();
       echo $e[cliente]; 

 

Se você fizer assim, qual linha você espera que o PHP retorne? Veja, o nome fetchAll() dá a entender que você está buscando TODAS as linhas de alguma coisa, ou pelo menos mais de uma. Veja, você está querendo criar um método que imprima todas as linhas e todas as colunas de uma consulta sem fazer nenhum loop. Isto é possível, mas não é prático, já que cada vez que você precisar utilizar, ou seja, em cada local da aplicação que você for utilizar, você vai precisar criar um HTML diferente. Então, neste caso, a melhor opção é uma que já foi sugerida lá no início, só que você vai precisar utilizar o fetchAll() e mais um foreach(). Seria algo assim, imaginando que você queira imprimir todos os usuários em uma tabela, mesmo sem saber quais campos existem no usuário.

 

<?php
class Db {
/**
 * @var resource
 */
private $query;
/**
 * @var string
 */
private $_separador = null;
/**
 * @var bool
 */
private $_juntarCampos = false;

public function __construct() {
	mysql_connect ( 'localhost', 'root', '123' );
	mysql_select_db ( 'inter' );
}

public function query($sql) {
	$this->query = mysql_query ( $sql );
	if (! $this->query)
		throw new Exception ( '<strong>Falhou a consulta:</strong> ' . $sql . '<br /><strong>Motivo:</strong> ' . mysql_error () );
	return $this;
}

/**
 * Método que retorna a quantidade de linhas da consulta
 * 
 * @return int
 */
public function numRows() {
	return mysql_num_rows ( $this->query );
}

/**
 * Método que define o separador entre os campos da tabela 
 * @param string $separador
 * @return Db - Fluent Interface 
 */
public function setSeparador($separador) {
	if ($this->_juntarCampos === false) {
		throw new Exception ( 'Você só pode definir um separador se você definir que os campos devem ser unidos.' );
	}
	$this->_separador = $separador;
	return $this;
}
/**
 * Método que define se deve ou não ser unidos todos os campos da tabela
 * @param bool $juntar
 * @return Db - Fluent Interface
 */
public function setJuntarCampos($juntar = true) {
	$this->_juntarCampos = ( bool ) $juntar;
	return $this;
}

/**
 * Método que retorna os dados da consulta
 * @return string|array
 */
public function fetchAll() {
	if ($this->_juntarCampos === true) {
		if ($this->_separador === null) {
			throw new Exception ( 'Você deve definir o separador para unir os campos.' );
		}
		$retorno = '';
		while ( $dados = mysql_fetch_array ( $this->query ) ) {
			$retorno .= implode ( $this->_separador, $dados );
		}
	} else {
		$retorno = array ();
		while ( $dados = mysql_fetch_array ( $this->query ) ) {
			$retorno [] = $dados;
		}
	}
	return $retorno;
}
}

$sql = new Db ();
try {
// vai retornar um array com todos os usuários
$all = $sql->query ( 'SELECT * FROM usuario' )->fetchAll ();
echo '<table>', PHP_EOL;
foreach ( $all as $usuario ) {
	echo '<tr><td>', implode ( '</td><td>', $usuario ), '</td></tr>', PHP_EOL;
}
echo '</table>';
} catch ( Exception $e ) {
echo $e->getMessage ();
}

 

Execute este código e veja se aparece como você precisa. Se for mais ou menos isto, tente compreender o que foi feito, para aprender. Busque sempre a referência no Manual. Sugiro também (caso não tenha lido) que veja o tópico de Orientações para uma boa participação.

 

Carlos Eduardo

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.