-
Total de itens
198 -
Registro em
-
Última visita
Reputação
6 RegularSobre Jeovane Carvalho
-
Classificação
Peter
- Data de Nascimento 01/19/1977
Informações Pessoais
-
Sexo
Masculino
-
Localização
SP
Contato
-
Site Pessoal
http://www.netsistec.com.br
Últimos Visitantes
1869 visualizações
-
Pegar dados de um While de uma Classe com Estrutura Preprada através de um novo objeto
Jeovane Carvalho postou um tópico no fórum PHP
Olá senhoras e senhores, venho aqui tirar uma dúvida ! Eu desenvolvi um projeto em php para um cliente e hospedei na Hostgator, como já trabalho com a hospedagem Hostgator há alguns anos, nunca tive problema até quando comecei a trabalhar com PREPARE STATEMENT , e aí me gerou uma grande dor de cabeça, e como não tinha muita experiência usando instrução preparada, comecei a desenvolver meus projetos através desta instrução e rodando de boa localmente, e foi só hospedar remotamente e já deu alguns erros, e o principal de foi * Call to undefined method mysqli_stmt::get_result() in * e consultando o site stackoverflow li um seguinte trecho de um desenvolvedor experiente que: O mysqli foi introduzido no php 5, já a função get_result pertence ao pacote mysqlnd que é o driver nativo. E como não tinha ciência desta função MYSQLND e pelo que eu li, ELA É NATIVA DO MYSQL, e para não perder o plano já contratado, tive que usar em vez de get_result() usar o bind_result (), só que tive dificuldades de alguns dias para resolver, mas consegui fazer com que na classe A, onde esta minhas instruções e conexões com o banco e o loop do while estão , fazer que ao instanciar um objeto e chamar cada variável usando [ ] como array conseguisse pegar todos os dados dentro do loop do while e irei mostrar logo abaixo: E a minha dúvida é saber se estaria fazendo de forma correta ou existiria outra forma de usar o foreach para percorrer um array. Segue abaixo o código de exemplo: CLASSE A: <?php class DadosAmortecedoresEletricos { private $conecta_banco; public function __construct(){ $this->conecta_banco=new Conexao(); $this->conecta_banco->Conectar(); } public $ativo; public $com_foto; public $sem_foto; public $linha; public $id; public $produto_id; public $negocio; public $negocio_tipo; public $tipos; public $tipo; public $imgP; public $valor; public $negocio_d; public $sqlL_2; public $sqlL_1; // ESSA CLASSE SERVE PARA PAGINAÇÃO public function BuscarDadosAmortecedoresEletricos(){ $conexao=$this->conecta_banco->banco; $Dados=new DadosEmpresa(); $Dados->BuscarDadosEmpresa(); $limit=$Dados->qtd_secao_eletrico; $ativo=$this->ativo=1; $sql_1=$conexao->prepare("SELECT i.id,i.id_produto_tipo,i.id_produto_subtipo,t.tipo,n.tipo_nome FROM dados_anuncio i LEFT JOIN tipo_produto t ON (t.id = i.id_produto_tipo)LEFT JOIN subtipo_produto n ON (n.id = i.id_produto_subtipo) WHERE i.ativo=? AND n.tipo_nome LIKE '%el%' ORDER BY i.id DESC LIMIT ".$limit.""); $sql_1->bind_param('s',$ativo); $sql_1->execute(); $sqlL_1=$sql_1->bind_result($id,$id_produto_tipo,$id_produto_subtipo,$tipo, $tipo_nome); while ($sql_1->fetch()) { $this->produto_id=$id_produto_tipo; $this->subproduto_id=$id_produto_subtipo; } $dados=""; $ativo=$this->ativo=1; // ESSA CLASSE SERVE PARA RESGATAR OS DADOS $sql_1 = $conexao->prepare("SELECT i.id AS idi,i.id_produto_tipo,i.foto_exibicao,i.foto_grande,foto_titulo,i.valor, t.tipo_nome, n.tipo AS tipo FROM dados_anuncio i LEFT JOIN subtipo_produto t ON (t.id = i.id_produto_subtipo) LEFT JOIN tipo_produto n ON (n.id =".$this->produto_id.") WHERE i.ativo=? AND t.tipo_nome LIKE '%el%' AND i.id_produto_subtipo LIKE '%".$this->subproduto_id."%' ORDER BY RAND () LIMIT ".$limit."") ; if($sql_1){ $sql_1->bind_param('s',$ativo); $sql_1->execute(); $sql_1->store_result(); $this->sqlT_3=$sql_1->bind_result($id,$id_produto_tipo,$foto_exibicao,$foto_grande,$foto_titulo,$valor, $tipo_nome, $tipo); while ($sql_1->fetch()) { $this->id[]=$id; $this->tipo[]=$tipo; $this->tipo_nome[]=$tipo_nome; $this->foto_exibicao[]=$foto_exibicao; $this->foto_grande[]=$foto_grande; $this->foto_titulo[]=$foto_titulo; $this->valor[]=$valor; } }} } ?> Minha página onde instancio o objeto abaixo: <?php // Aqui é onde uso os foreach para percorrer cada variável $n=0; $tipos=array(); $n=0; foreach ($dados_elet->id as $key=> $thing) { $tipos[$n][1] = $thing; $n++; } if(is_array($dados_elet->tipo)){ $n=0; foreach ($dados_elet->tipo as $thing) { $tipos[$n][2] = $thing; $n++; }} if(is_array($dados_elet->tipo_nome)){ $n=0; foreach ($dados_elet->tipo_nome as $thing) { $tipos[$n][3] = $thing; $n++; }} if(is_array($dados_elet->foto_exibicao)){ $n=0; foreach ($dados_elet->foto_exibicao as $thing) { $tipos[$n][4] = $thing; $n++; }} if(is_array($dados_elet->foto_grande)){ $n=0; foreach ($dados_elet->foto_grande as $thing) { $tipos[$n][5] = $thing; $n++; }} if(is_array($dados_elet->foto_titulo)){ $n=0; foreach ($dados_elet->foto_titulo as $thing) { $tipos[$n][6] = $thing; $n++; }} if(is_array($dados_elet->valor)){ $n=0; foreach ($dados_elet->valor as $thing) { $tipos[$n][7] = $thing; $n++; }} foreach($tipos as $dados_inf){ $imgP= $dados_inf[4]; $descricao= $dados_inf[6]; $id= $dados_inf[1]; $negocio= $dados_inf[2]; $negocio_id= $dados_inf[2]; $subtipo= $dados_inf[3]; $negocio_tipo= $dados_inf[2]; $tipos= $dados_inf[2]; $valor= $dados_inf[7]; if($valor=='0.00' || $valor==''){$valor='Consulte-nos';}else{ $valor ="R$ ".$valor;} $tipo= $tipos;$tipo= strtolower(str_replace(" ","-",strtr(utf8_decode(trim($tipo)),utf8_decode("áàãâéêíóôõúüñçÁÀÃÂÉÊÍÓÔÕÚÜÑÇ"),"aaaaeeiooouuncAAAAEEIOOOUUNC-"))); $imgP2='img_produtos/thumbs/'.$imgP.''; if(file_exists($imgP2)){$foto='<img class="lozad" data-src="'.$Dados->site.'img_produtos/thumbs/'.$imgP.'" alt="'.$tipo.'" />';}else{$foto='<img src="'.$Dados->site.'images/sem_foto.jpg" alt="'.$tipo.'" />';} echo $com_foto='<ul class="menu"><div class="favoritos_add"> <a data-id="'.$id.'" data-toggle="modal" title="'.$id.'" data-target="#myModalfavoritos'.$id.'" id="'.$id.'" class="hvr-pulse"><img src="images/coracao_fav_ext.png" alt="Favoritos" /></a></div> <li><a title="'.$tipo.' | valor: '.$valor.'" href="'.$Dados->site.'contato">'.$foto.'</a> <div class="fundo_dados"> <div class="dados_tipo">'.$tipos.' </div> <div class="dados_subtipo">'.$subtipo.'</div> <div class="dados_titulo">'.$descricao.'</div> <div class="dados_valor">'.$valor.'</div> <div class="informacoes"><a title="'.$negocio.' | '.$tipo.'| valor: '.$valor.'" href="'.$Dados->site.'contato">MAIS INFORMAÇÕES</a></div> <div class="comparar"> <label><input name="comparar[]" type="checkbox" id="comparar" value="'.$id.'" /> Comparar</label><div class="dados_codigo">código: '.$id.'</div></div> </div></li></ul>'; ?> Notem que para cada variável eu uso um foreach para varrer as informações do while da outra página e por último eu uso um foreach que pega cada variável do foreach e distribuo as informações de cada variável na sua matriz na ordenação de [1] , [2], [3] e assim por diante. Resumindo , funciona mas queria saber se existe outra maneira com menos linha de código e que fique mais rápido na hora do php compilar .. Lembrando que não posso usar GET_RESULLT(). E acredito que muitos terão este problema quando começarem a atualizar seus códigos.. Obrigado :)