PHP: PDO não reconhece as variáveis.

17/10/2020

11

Percebi que meu PDO não tem reconhecido as variáveis que eu passo ao montar a minha query.
1. Estou montando a query em uma string e concatenando as variáveis;
2. Ao debugar a montagem da query percebo que ela é montada normalmente, com todos os dados que eu concatenei;
3. Ao rodar o execute na query ela ignora todas as variáveis da query;

ps: Já tentei fazer bind de diversas maneiras e nada funcinou.

$input = json_decode(file_get_contents("php://input"));
$primary_key = $input->id;
$dado1 = $input->dado1;
$dado2 = $input->dado2;

try {
        $query = $pdo->prepare('UPDATE tabela SET campo_$dado1 = $dado2 WHERE id = $primary_key');
        $result = $query->execute(   );
    } catch (PDOStatement $e) {
        return $e->getMessage();
    }


Algumas fatos:
Quando faço var_dump no prepare da query testo diretamente no bd a query é executada normalmente.
O erro que o PHP manda para o log é o seguinte:
<Exception: 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 'WHERE IDBANHO =' at line 1>

Versões:
PHP 7.4.3
MySQL Ver 8.0.21-0ubuntu0.20.04.4 for Linux on x86_64
PDO Driver MySQL mysqlnd 7.4.3



Alguém já teve algum problema parecido?
Mateus Vitor

Mateus Vitor

Responder

Post mais votado

27/10/2020

Olá amigo, tudo bem?

Deixe sua query assim:
$query = $pdo->prepare("UPDATE tabela SET campo_$dado1 = '$dado2' WHERE id = $primary_key");


Quando voce utiliza aspas simples no PHP ele entende o texto literalmente, ou seja, se voce usar campo_$dado1 ele vai montar uma string "campo_$dado1".

Se voce utlizar aspas duplas, ele vai pegar os valores das variaveis que voce colocar dentro dessas aspas, logo o campo_$dado1 vai ficar "campo_xxxxx" sendo xxxx o valor da variavel.

Teste e me mande se funcionou.

Espero ter ajudado. ;D

Alex William

Alex William
Responder

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

Aceitar