sprintf() Versus mysql_query()
-
26-09-2019 - |
Pergunta
Tendo problemas de formatação meu código para executar, sem erros, utilizando sprintf() Quando eu executar o código recebo este erro:Erro de análise:erro de sintaxe, inesperado T_VARIABLE no local ou na linha 16
$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = '$q'', $tablename);
Acima é a linha 16 no meu código.Eu estou supondo que é sintaxe relacionados.
Agora estou recebendo o seguinte erro:
Erro Fatal:Exceção não identificada 'PDOException" com mensagem " SQLSTATE[42000]:Erro de sintaxe ou de violação de acesso:1065 Consulta estava vazio' em /home/content/63/6563663/html/inventário/pg.php:19 de rastreamento de Pilha:#0 /home/content/63/6563663/html/inventory/pg.php(19):PDOStatement->execute() #1 {principal} lançada em /home/content/63/6563663/html/inventory/pg.php na linha 19
Esse é todo o meu bloco de código:
<?php
$u=$_GET["u"];
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form2")) {
$amount = isset($_POST['amount']) ? $_POST['amount'] : null;
if (null != $amount) {
$user = 'username';
$pass = 'password';
$pdo = new PDO('mysql:localhost', $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
session_start();
$tablename = $_SESSION['MM_Username'];
$query = sprintf('UPDATE %s SET stock= :amount WHERE itemname= '.$u, $tablename);
$stmt = $pdo->prepare($UpdateQuery);
$stmt->bindParam('amount', $amount);
$stmt->execute();
}
}
?>
Obrigado, parece o meu erro é lidar com a DOP de execução, e não a própria consulta.Se alguém tem quaisquer idéias sobre o que seria ótimo.Alan, eu usei o método para as aspas e também estou executando a consulta através mysql_real_escape_string().
Nenhuma solução correta
Outras dicas
Por favor, não construir consultas SQL de variáveis.O uso de bind variables.
Tente isso:
$query = sprintf('UPDATE
%sSET
estoque= :amount WHERE
nome do item= '.$q, $tablename);
Você precisa colocar um operador de concatenação entre strings e variáveis de combiná-los juntos.Você também pode se livrar do ''
depois de $q
porque ele não está mudando a seqüência de caracteres em tudo.
Editar:
Eu acredito que eu li errado o que você está tentando fazer.Tente isso:
$query = sprintf("UPDATE
%sSET
estoque= :amount WHERE
nome do item= '$q'", $tablename);
Alterando as string PHP para estar dentro de aspas duplas, você não precisa escapar de seu aspas simples, e $q vai ser expandida para o seu valor.
Além disso, certifique-se de que você execute $q $tablename através de mysql_real_escape_string()
para evitar a injeção de SQL.
Igual a:
$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'', $tablename);
ou
$query = sprintf("UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'", $tablename);
Você não pode ter inigualável '
s em cordas delimitadas por '
. Ou não -específico "
s em cordas delimitadas por "
. Para escapar do delimitador de cordas, você precisa prender um \
personagem.