VieiraSA 1 Denunciar post Postado Novembro 11, 2013 Olá Caros.No servidor está este erro:[11-Nov-2013 04:12:40 America/Los_Angeles] PHP Fatal error: Call to a member function prepare() on a non-object in /home/vieirasa/public_html/CONTROLLER/userDAO.php on line 130Nesta linha: $query = $pdo->prepare(" SELECT login,pass FROM autentication WHERE login = ? AND pass = ?; ");Contudo no localhost está funcionando perfeitamente, o que poderia ser? A função inteira está abaixo: public function autentication(User $user) { $user->setPass(md5($user->getPass())); $cn = new Connection(); $pdo = $cn->openConnection(); $query = $pdo->prepare(" SELECT login,pass FROM autentication WHERE login = ? AND pass = ?; "); $query -> bindParam(1, $user->getLogin(), PDO::PARAM_STR); $query -> bindParam(2, $user->getPass(), PDO::PARAM_STR); $query -> execute(); $result = $query->fetchObject(); if ($result) { $response = array ( 'login' => $result->login, 'pass' => $result->pass, 'response' => true ); return $response; } else { return false; } }Outro detalhe no servidor tem o postgres 8.1, e minha maquina tem o servidor 9.1, será isso o problema?Alguém já passou por algum problema parecido?Agradeço antecipadamente,Att,André Vieira. Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Novembro 11, 2013 verifique o retorno dessa linha, $pdo = $cn->openConnection(); de um print_r() em $pdo print_r($pdo); lembre que na ultima linha de openConnection() deve ter um return. poste o codigo de openConnection() outra coisa, se for usar bindParam vc deve obrigatoriamente usar variaveis e não retornos de metodos/funções uma opção mais simples é trocar bindParam por bindValue() onde retornos podem ser passados. $query -> bindParam(1, $user->getLogin(), PDO::PARAM_STR); $query -> bindParam(2, $user->getPass(), PDO::PARAM_STR); Outro detalhe no servidor tem o postgres 8.1, e minha maquina tem o servidor 9.1, será isso o problema? aqui não, outros problemas de versão seriam na hora de restaurar backup, tipos de dados, algumas instruções, etc Compartilhar este post Link para o post Compartilhar em outros sites
raonibs 64 Denunciar post Postado Novembro 11, 2013 Use o phpinfo() e veja se o PDO esta habilitado na sua hospedagem. Compartilhar este post Link para o post Compartilhar em outros sites
VieiraSA 1 Denunciar post Postado Novembro 11, 2013 verifique o retorno dessa linha, $pdo = $cn->openConnection(); de um print_r() em $pdo print_r($pdo); lembre que na ultima linha de openConnection() deve ter um return. poste o codigo de openConnection() outra coisa, se for usar bindParam vc deve obrigatoriamente usar variaveis e não retornos de metodos/funções uma opção mais simples é trocar bindParam por bindValue() onde retornos podem ser passados. $query -> bindParam(1, $user->getLogin(), PDO::PARAM_STR); $query -> bindParam(2, $user->getPass(), PDO::PARAM_STR); aqui não, outros problemas de versão seriam na hora de restaurar backup, tipos de dados, algumas instruções, etc Olá shini. Obrigado pela resposta. A classe connection é <pre> class Connection { private $pdo; public function openConnection() { $dsn = 'pgsql:host=localhost;port=5432;dbname=gym'; $user = 'postgres'; $pass = '123'; $options = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_CASE => PDO::CASE_LOWER); try { $this->pdo = new PDO($dsn, $user, $pass, $options); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $this->pdo; } catch(PDOException $e) { echo 'Erro: ' . $e->getMessage(); } } public function closeConnection() { unset($this->pdo); } } </pre> Use o phpinfo() e veja se o se PDO esta habilitado na sua hospedagem. Olá Raoni, Obrigado pela resposta. Vou verificar, volto depois com o feedback. Use o phpinfo() e veja se o PDO esta habilitado na sua hospedagem. Boa, o postgres driver não está habilitado. Olhá o que eu achei: PDO drivers sqlite, sqlite2, mysql Tem como habilitar isso? Ou é só o admin tem acesso? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
raonibs 64 Denunciar post Postado Novembro 11, 2013 Se você não perceber o driver necessário no phpinfo para ter certeza você pode usar o seguinte: print_r(PDO::getAvailableDrivers()); Deverá aparecer uma saída parecida com de baixo e deve ter driver para o banco que você esta usando: Array ( [0] => mysql [1] => sqlite ) Se retornar uma array vazio ou o driver que você precisar não estiver presente então você deve entrar em contato com o suporte da sua hosdapegem e pedir a ativação do mesmo. Compartilhar este post Link para o post Compartilhar em outros sites