Ir para conteúdo

POWERED BY:

Arquivado

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

VieiraSA

PHP Fatal error: Call to a member function prepare() on a non-object

Recommended Posts

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 130
Nesta 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

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

 

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.

 

 

2hmiut1.png

 

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.