Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

erro ao listar itens do BD

estou tentando listar todos os produtos de uma tabela no banco de dados que possuam a mesma categoria de produto porém está sendo exibido o seguinte erro:

PDOException Object
(
    [message:protected] => SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM produtos WHERE categoria_id = '0'' at line 1
    [string:Exception:private] => 
    [code:protected] => 42000
    [file:protected] => C:\curso php\PDO1\classes\Produto.php
    [line:protected] => 48
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => C:\curso php\PDO1\classes\Produto.php
                    [line] => 48
                    [function] => execute
                    [class] => PDOStatement
                    [type] => ->
                    [args] => Array
                        (
                        )
                )
            [1] => Array
                (
                    [file] => C:\curso php\PDO1\classes\Categoria.php
                    [line] => 63
                    [function] => listarPorCategoria
                    [class] => Produto
                    [type] => ::
                    [args] => Array
                        (
                            [0] => 1
                        )
                )
            [2] => Array
                (
                    [file] => C:\curso php\PDO1\categorias-detalhe.php
                    [line] => 8
                    [function] => carregarProdutos
                    [class] => Categoria
                    [type] => ->
                    [args] => Array
                        (
                        )
                )
        )
    [previous:Exception:private] => 
    [errorInfo] => Array
        (
            [0] => 42000
            [1] => 1064
            [2] => You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM produtos WHERE categoria_id = '0'' at line 1
        )
)

o arquivo que estou acessando o arquivo categorias-detalhe.php pela url http://localhost:8080/categorias-detalhe.php?id=1

ou seja ele deveria listar todos os produtos na tabela produdos que possuem o categoria_id =1 categorias-detalhe.php

<?php require_once 'global.php';
?>
<?php
try {
    $id = $_GET['id'];
    $categoria = new Categoria($id);
    $categoria->carregarProdutos();
    $listaProdutos = $categoria->produtos;
}catch(Exception $e){
    Erro::trataErro($e);
}
?>
<?php require_once 'cabecalho.php' ?>
<div class="row">
    <div class="col-md-12">
        <h2>Detalhe da Categoria</h2>
    </div>
</div>
<dl>
    <dt>ID</dt>
    <dd><?php echo $categoria->id; ?></dd>
    <dt>Nome</dt>
    <dd><?php echo $categoria->nome; ?></dd>
    <dt></dt>
    <dd>
        <ul><?php foreach($listaProdutos as $linha): ?>
            <li><a href="/produtos-editar.php?id=<?php echo $linha['id']; ?>"><?php echo $linha['nome']; ?></a></li>
            <?php endforeach; ?>
        </ul>
    </dd>
</dl>
<?php require_once 'rodape.php' ?>

categoria.php

<?php
class Categoria
{
    public $id;
    public $nome;
    public $produtos;
    public function carregarProdutos (){
        $this->produtos = Produto::listarPorCategoria($this->id);

Produto.php

<?php

class Produto {

    public $id;
    public $nome;
    public $preco;
    public $quantidade;
    public $categoria_id;

    public static function listarPorCategoria($categoria_id){

        $query = 'SELECT id, nome, preco, quantidade, FROM produtos WHERE categoria_id = :categoria_id';
        $conexao = Conexao::pegarConexao();
        $stmt = $conexao->prepare($query);
        $stmt->bindValue(':categoria_id', intVal('$categoria_id'));
        $stmt->execute();
        return $stmt->fetchAll();

    }


?>

o que pode estar acontecendo?

2 respostas
solução!

Olá Marcos,

O erro parece ser causando pela vírgula extra no SQL antes do FROM em listarPorCategoria da classe Produto:

                                           Aqui
$query = 'SELECT id, nome, preco, quantidade[,] FROM produtos WHERE categoria_id = :categoria_id';

Testa se removendo essa vírgula o problema é resolvido.

depois de tentar corrigir o erro muitas vezes e postar aqui consegui encontrar o erro, era justamente isso só não havia tido tempo de postar aqui.

Obrigado pela ajuda