Pegar dados de um While de uma Classe com Estrutura Preprada através de um novo objeto
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 :)Discussão (2)
Carregando comentários...