Erro ao usar function PDO - Uncaught exception PDOException

15/02/2015

0

Boa tarde, estou tentando usar a seguinte function PDO para fazer um select , mas apresenta o seguinte erro: Quem puder me orientar agradeço.

Essa é a classe :
<?php

class Querys extends BD {

    public function selecaoLimit($limite) {
        $sqlLimite = "SELECT * FROM 'posts' WHERE status = '1' ORDER BY id DESC $limite";

        return self::conn()->query($sqlLimite);
    }


}

?>


A conexão com o banco estou usando da seguinte forma:
<?php
class BD{
    private static $conn;
    public function __construct() {}

public static function conn(){
    if(is_null(self::$conn)){
        self::$conn = new PDO ('mysql:host=localhost;dbname=xxxx;','xxxxx','xxxxx');
        //self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    return self::$conn;
}
    
}


è claro que no lugar dos xxx coloco os dados do banco.

para fazer o select estou usando o seguinte codigo :
<?php 
     foreach($query->selecaoLimit(1) as $post){ 
     
     
     ?>
                    <div id="destaque">
                        <a href="<?php echo $BASE.'/'.$post['categoria'].'/'.$post['slugcat'];?>" title="<?php echo $post['titulo'] ;?>"><img src="<?php echo $BASE ;?>/posts/<?php echo $post['imgexibicao'] ;?>" width="300" height="170"/><span><?php echo $post['titulo'] ;?></span></a>
                    </div><!--destaque-->
<?php } ?>


e com isso apresenta o seguinte erro:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''posts' WHERE status = '1' ORDER BY id DESC 1' at line 1' in C:\Program Files\EasyPHP-12.1\www\novoprojeto\class\Querys.class.php:9 Stack trace: #0 C:\Program Files\EasyPHP-12.1\www\novoprojeto\class\Querys.class.php(9): PDO->query('SELECT * FROM '...') #1 C:\Program Files\EasyPHP-12.1\www\novoprojeto\pages\home.php(3): Querys->selecaoLimit(1) #2 C:\Program Files\EasyPHP-12.1\www\novoprojeto\index.php(19): include('C:\Program File...') #3 thrown in C:\Program Files\EasyPHP-12.1\www\novoprojeto\class\Querys.class.php on line 9

Ali diz que o erro ta na Querys.class.php on line 9

que é

return self::conn()->query($sqlLimite);


Que erro é esse ? alguem poderia me auxiliar na resolução deste problema ?
Marcos

Marcos

Responder

Post mais votado

16/02/2015

ao q parece, sql está errada; tire:
1 - as crases do nome da tabela;
2 - essa variavel: $limite (está sem utilidade).
-se vc quer limitar a quantidade de linhas retornadas, coloque a palavra limit e a seguir, o nº de linhas
(ex: limit 5 vai t retornar apenas 5 linhas).
- se vc quer substituir o nº 5, do exemplo acima, por uma variavel, a sintaxe fica:
"SELECT * FROM posts WHERE status = '1' ORDER BY id DESC LIMIT $limite"
mas verifique se está passando essa variavel corretamente e se vc está executando a SQL após a declaração.

dicas sobre PDO:
https://www.devmedia.com.br/introducao-ao-php-pdo/24973
http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/

Fernando C

Fernando C
Responder

Mais Posts

15/02/2015

William

Qual versão do MySQL vc tá usando?
Responder

17/02/2015

Marcos

A versão é 5.5 Willian.

Obrigado Fernando , segui sua dica e funcionou .

O problema estava nas 'aspas' da tabela e faltava o LIMIT .

Coloquei na forma que vc orientou e funcionou. Obrigado.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar