uiLhian 1 Denunciar post Postado Abril 12, 2013 Bom estou tentando colocar uma paginação utilizando o PEAR só que estou com o seguinte problema quando vou "abrir" a pagina ele demora demais e me retorna os seguintes erros: Warning: PDO::__construct(): MySQL server has gone away in E:\WebServer\class\PDO.class.php on line 18Warning: PDO::__construct(): Error while reading greeting packet. PID=2724 in E:\WebServer\class\PDO.class.php on line 18 Warning: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2006] MySQL server has gone away' in E:\WebServer\class\PDO.class.php:18 Stack trace: #0 E:\WebServer\class\PDO.class.php(18): PDO->__construct('mysql:host=loca...', 'root', '') #1 E:\WebServer\USBWebServer 8.5\Construtora\cwva\galeria.php(4): Conexao->__construct() #2 E:\WebServer\portifolio.php(57): require_once('E:\WebServer\...') #3 {main} thrown in E:\WebServer\class\PDO.class.php on line 18Fatal error: Maximum execution time of 30 seconds exceeded in E:\WebServer\class\PDO.class.php on line 18 PDO.class.php <?php //ela herdará os métodos e atributos do PDO através da palavra-chave extends class Conexao extends PDO { //CONEXÃO COM BANCO DE DADOS private $dsn = "mysql:host=localhost;port=3060;dbname=testando"; private $user = "root"; private $senha = ""; public $handle = null; function __construct() { try { //HERDARÁ O PDO EM SI, USANDO parent::_construct() if ( $this->handle == null ) { $dbh = parent::__construct( $this->dsn , $this->user , $this->senha ); $this->handle = $dbh; return $this->handle; } } catch ( PDOException $e ) { echo "Falha na Conexão - Erro: " . $e->getMessage(). " - Código: ".$e->getCode(); return false; } } //FECHAR CONEXÃO function __destruct() { $this->handle = NULL; } } ?> galeria.php <?php require_once('class/PDO.Class.php'); require_once('pager/Pager.php'); $PDO = new Conexao; $listar = $PDO->query('SELECT * FROM obras ORDER BY obra_id DESC'); $dados = $listar->fetchAll(PDO::FETCH_OBJ); $params = array ( 'mode' => 'Sliding', 'perPage' => 5, 'itemData' => $dados ); $pager = & Pager::factory($params); $data = $pager->getPageData(); $o = new ArrayIterator($data); while($o->valid()): ?> <li class="span3"> <div class="thumbnail" id="<?php $o->current()->obra_id; ?>"> <a href="portifolio.php?id=<?php $o->current()->obra_id; ?>"> <img src="thumb.php?img=fotos/<?php $o->current()->obra_url; ?>" alt=""> </a> <div class="caption"> + informações </div> </div> </li> <?php $o->next(); endwhile; ?> portifolio.php <div class="row-fluid"> <ul class="thumbnails" id="galeria"> <?php require_once('galeria.php'); ?> </ul> <div class="pagination pagination-right"> <?php $links = $pager->getLinks(); echo $links['all']; ?> </div> </div> Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Abril 12, 2013 o servidor de banco de dados morreu Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 12, 2013 como ? :( Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Abril 12, 2013 Verifique certas diretivas no php.ini, tais como:- mysql.connect_timeout;- default_socket_timeout. Coloque um tempo alto para testes, como 300 segundos. Depois, verifique o porque está demorando a sua consulta, deve ter alguma coisa errada nela. Há quantos registros na tabela obras? Como todo o trabalho é feito pelo PHP, se houver muitos registros, vai demorar bastante. Eu normalmente utilizo LimitIterator, mas começa a me dar problemas de lentidão com mais de 1500 registros. Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Abril 12, 2013 esses 3 itens podem te dar uma ideia do q esta acontecendo MySQL server has gone away SQLSTATE[HY000] [2006] Maximum execution time of 30 seconds exceeded Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 12, 2013 - mysql.connect_timeout = 200- default_socket_timeout. = - tem uns 20 registros ainda só. isso aqui é correto ? $o = new ArrayIterator($data); foreach($obras as $e => $o->valid()){ o código em si: $listar = $PDO->prepare('SELECT * FROM obras ORDER BY obra_id DESC'); $listar->execulte(); $obras = $listar->fetchAll(PDO::FETCH_ASSOC); $params = array ( 'mode' => 'Sliding', 'perPage' => 5, 'itemData' => $obras ); $pager = & Pager::factory($params); $data = $pager->getPageData(); $o = new ArrayIterator($data); foreach($obras as $e => $o->valid()){ o erro que me retorna: Fatal error: Can't use method return value in write context in Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Abril 12, 2013 Não, não é. ArrayIterator é um objeto que implementa a interface Iterator. A interface Iterator permite você tratar um objeto como um array. Podendo avançar, ou retroceder, em seus elementos. Uma coisa que eu nunca entendi, é a ArrayIterator implementar a interface Traversable, já que Iterator extende Traversable. Traversable é a interface que permite o objeto ser utilizado em um foreach. Só não faz muito sentido implementar as duas se uma já extende a outra. Voltando ao seu problema. Você possui um objeto que pode ser iterado e o foreach. O objeto que pode ser iterado é $o. Trate-o como um array: foreach($o AS $key => $row) { } Entretanto, se você fosse utilizar um for, o correto seria: for($o->rewind() ; $o->valid() ; $o->next()) { $key = $o->key(); $row = $o->current(); } Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 12, 2013 da o mesmo erro que estava dando la em cima: Warning: PDO::__construct(): MySQL server has gone away in E:\WebServer\class\PDO.class.php on line 18Warning: PDO::__construct(): Error while reading greeting packet. PID=2724 in E:\WebServer\class\PDO.class.php on line 18 Warning: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2006] MySQL server has gone away' in E:\WebServer\class\PDO.class.php:18 Stack trace: #0 E:\WebServer\class\PDO.class.php(18): PDO->__construct('mysql:host=loca...', 'root', '') #1 E:\WebServer\USBWebServer 8.5\Construtora\cwva\galeria.php(4): Conexao->__construct() #2 E:\WebServer\portifolio.php(57): require_once('E:\WebServer\...') #3 {main} thrown in E:\WebServer\class\PDO.class.php on line 18Fatal error: Maximum execution time of 30 seconds exceeded in E:\WebServer\class\PDO.class.php on line 18 Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 12, 2013 Uma pesquisa rápida no Google (com critérios bem óbvios, diga-se de passagem) me apontou esse Bug report do PHP do qual se tem um link para uma possível solução especificamente voltada para o MySQL: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); Sendo $db seu objeto de conexão. Se não resolver, dê uma olhada na resposta melhor avaliada desse stack e cheque o valor daquela diretiva do MySQL. Uma coisa que eu nunca entendi, é a ArrayIterator implementar a interface Traversable, já que Iterator extende Traversable. Será que não é só no manual essa inconsistência, meramente a título descritivo? Não entendo o código do PHP pra dizer com certeza... Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Abril 12, 2013 Será que não é só no manual essa inconsistência, meramente a título descritivo? Não entendo o código do PHP pra dizer com certeza...Foi meu primeiro pensamento, mas mesmo em caso positivo, não faz muito sentido. Vou olhar o código fonte e ver se acho algo. Confirmado, é meramente para descrição de implementação ou erro mesmo. Dentre as duas opções, a correta ficará "em haver" ou a critério do leitor. Eu acho a segunda opção a mais correta. http://www.php.net/~helly/php/ext/spl/classArrayIterator.html Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 13, 2013 bom eu to tentando tudo isso que estão passando, e nada de resolver... peguei e revi o video umas 10 vezes e não vi nada de diferente do que ta aqui. :( ta osso. :( alguma solução por favor... :( pois infelizmente eu não to conseguindo. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 13, 2013 Testou o que eu te passei na primeira metade do post #9? Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 13, 2013 sim testei, e nada infelizmente. :( <?php require_once('class/PDO.Class.php'); require_once('pager/Pager.php'); $pdo = new Conexao; $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); $listar = $pdo->query('SELECT * FROM obras ORDER BY obra_id DESC'); $obras = $listar->fetchAll(PDO::FETCH_OBJ); ... ?> Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 13, 2013 Experimenta conectar diretamente pela PDO, sem ser por essa classe que, com todo respeito, não serve pra nada. Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 13, 2013 retorna os mesmo erros... :( bom eu não sei se muda de versão anteriores para as de agora, mas eu procure no meu php.ini e não tem essa linha extension=php_pdo.dll Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 13, 2013 Desde a versão 5.1.0 do PHP, a PDO é parte integrante do próprio PHP, sem extensões. :) ACHO que eu matei seu problema com base nesse stack do ServerFault. Dá uma olha no teu DSN. Especificar a porta de conexão é sempre um problema. Se você tem uma instalação padrão, pode omitir a porta que o PHP se encarrega de conectar na correta, a 3306 e não a 3060. Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 13, 2013 bom eu usava aquele USBWebServer 8.5 pra rodar o php,mysql e apache aqui no pc.. ae peguei e instalei o Wamp (não sei se é o melhor caso saiba de algum melhor estou a sugestões) depois tirei aquela class e coloquei direto. <?php function conectar() { $dsn = 'mysql:host=localhost;dbname=testando'; $user = 'root'; $password = ''; try { $dbh = new PDO($dsn, $user, $password); } catch(PDOException $e) { echo 'Erro encontrado: ' . $e->getMessage(); } return $dbh; } ?> e agora ele está me retornando os seguintes erros: Erro encontrado: SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it. SCREAM: Error suppression ignored for( ! ) Notice: Undefined variable: dbh in E:\WebServer\Wamp\www\class\PDO.class.php on line 17 Fatal error: Call to a member function query() on a non-object in E:\WebServer\Wamp\www\cwva\galeria.php on line 7 Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 13, 2013 Ao que tudo indica, erro de autenticação, verifique usuário e senha. Mas o seu stack trace me chamou a atenção sobre uma supressão de erro na classe sem propósito que está utilizando. Se houver algum arroba ocultando o problema fica difícil de ajudar. E mais! Aquele return deveria estar dentro do try e o catch deveria estar abortando a execução, por isso o Fatal Error. Você disse que está com o WAMP... Você removeu completamente o servidor anterior? Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Abril 13, 2013 o outro servidor era "portable" sem instalação só desliguei ele... bom fucei e fucei agora ta dando o seguinte erro: Non-static method Pager::factory() should not be called statically in E:\Wamp\www\U\galeria.php on line 17 a linha 17 que ele acusa é essa $pager = & Pager::factory($params); Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 14, 2013 Simples você está invocando um método não estático de forma estática ("usando os dois pontos duplos") Compartilhar este post Link para o post Compartilhar em outros sites