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

You have an error in your SQL syntax

Pessoal,

Fiz as alterações seguindo os execícios. Quase tudo funcionou. Consigo adicionar um produto, mas não consigo alterá-lo. Aparece a seguinte mensagem de erro

O produto Livro de TDD PHP da Casa do Codigo não foi alterado.

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 'where id = '3'' at line 1

Minha função ficou assim

function alteraProduto($conexao, Produto $produto){
    $query = "update produtos set nome = '{$produto->nome}', preco = {$produto->preco}, descricao = '{$produto->descricao}', categoria_id = {$produto->categoria_id}, usado = {$produto->usado} where id = '{$produto->id}'";
    $resultadoDaAlteracao = mysqli_query($conexao, $query);
    return     $resultadoDaAlteracao;
}

Já tentei com e sem as aspas na interpolação da variável $produto->id

5 respostas

Olá, Bruno.

Tente remover as aspas simples que estão envolvendo a interpolação do $produto->id. Seu código ficará assim:

function alteraProduto($conexao, Produto $produto){
    $query = "update produtos set nome = '{$produto->nome}', preco = {$produto->preco}, descricao = '{$produto->descricao}', categoria_id = {$produto->categoria_id}, usado = {$produto->usado} where id = '{$produto->id}'";
    $resultadoDaAlteracao = mysqli_query($conexao, $query);
    return     $resultadoDaAlteracao;
}

Acredito que você está tentando validador uma dado como STRING mas o campo no MySQL é um INT.

O problema pode ser o seguinte, o valor que esta sendo atribuído ao atributo usado

$produto->usado

é

false

entao a sua query está recebendo vazio,se caso o atributo estivesse recebendo "true" ele receberia o valor 1,onde seria inserido no banco,mas como ele recebe false,e false no php é vazio ,o objeto quebra a sua query , voce pode fazer o seguinte,coloque aspas simples no objeto usado.

'{$produto->usado}'

e o valor inserido no banco vai ser 0.

Marco,

Já havia tentado sem as aspas e o erro persiste.

José Tiago,

Ao colocar aspas na interpolação da variável usado ele apresenta um outro erro.

Incorrect integer value: '' for column 'usado' at row 1

Entao Bruno voce pode dar um "echo" dentro do metodo alteraProduto pra saber o que está sendo enviado.

<?php

function alteraProduto($conexao, Produto $produto){
    $query = "update produtos set nome = '{$produto->nome}', preco = {$produto->preco}, descricao = '{$produto->descricao}', categoria_id = {$produto->categoria_id}, usado = {$produto->usado} where id = '{$produto->id}'";

    echo $query."<br>";
    $resultadoDaAlteracao = mysqli_query($conexao, $query);
    return     $resultadoDaAlteracao;
}
solução!

Jose Tiago,

Descobri, mais ou menos, o que aconteceu. Após fazer os cursos I e II de PHP onde instalei o Xampp. Segui a trilha da carreira Desenvolvedor Back End PHP e fiz o curso de MySQL I. Lá tem uma orientação para instalar o MYSQL Server. Instalei o 5.7 e fiz o curso. Acontecei que quando retornei para o curso de orientação a objetos com PHP tive problemas no Xampp pois a porta 3006 já estava ocupada pelo MySQL server e não permitia que o Mysql do Xampp fosse executado. Fiz a troca das portas e o banco que aparecia no Xampp era o do MySQL Server 5.7. Importei novamente as tabelas e segui codando. Até que apareceu aquele erro de sintaxe SQL que postei aqui. Reconfigurei as portas novamente e retornou o banco original do projeto LOJA (inclusive com meus registros). Aí a sintaxe PHP para alteração voltou a funcionar perfeitamente. Só que agora não consigo acessar os outros bancos do MySQL Server 5.7 Obrigado pela ajuda.