sprintf () Versus mysql_query ()
-
26-09-2019 - |
Domanda
Hai problemi formattare il mio codice da eseguire senza errori utilizzando sprintf () Quando eseguo il codice ottengo questo errore: Errore di analisi: errore di sintassi, T_VARIABLE inatteso / posizione sulla linea 16
$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = '$q'', $tablename);
Sopra è la linea 16 nel mio codice. Sto assumendo è la sintassi legato.
Ora sto ricevendo il seguente errore:
Fatal error: eccezione Uncaught 'PDOException' con il messaggio 'SQLSTATE [42000]: errore o di violazione di accesso Sintassi: 1065 Query era vuota' in /home/content/63/6563663/html/inventory/pg.php:19 Stack trace: # 0 /home/content/63/6563663/html/inventory/pg.php(19): PDOStatement-> execute () # 1 {main} gettato in / home / content / 63/6563663 / html / inventario / pg.php on line 19
Questo è il mio intero blocco di codice:
<?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();
}
}
?>
Grazie, sembra il mio errore a che fare con l'esecuzione DOP, non la query stessa. Se qualcuno ha qualche idea su che sarebbe fantastico. Alan, ho usato il metodo per le quotazioni e anche sto facendo funzionare la query tramite mysql_real_escape_string ().
Nessuna soluzione corretta
Altri suggerimenti
Si prega di non costruire query SQL di variabili. Usa legano variabili.
Prova questo:
$query = sprintf('UPDATE
% sSET
stock= :amount WHERE
itemname= '.$q, $tablename);
Hai bisogno di mettere un operatore di concatenazione tra stringhe e le variabili di combinarle insieme. È inoltre possibile eliminare il ''
dopo $q
perché non sta cambiando la stringa a tutti.
Modifica:
Credo ho letto male ciò che si sta cercando di fare. Prova a modificare:
$query = sprintf("UPDATE
% sSET
stock= :amount WHERE
itemname= '$q'", $tablename);
Per cambiare la stringa di PHP per essere tra virgolette, non c'è bisogno di fuggire i tuoi virgolette singole, e $ q sarà espanso al suo valore.
Inoltre, assicurarsi che si esegue $ q $ e tablename attraverso mysql_real_escape_string()
all'iniezione Prevenire SQL.
In questo modo:
$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'', $tablename);
o
$query = sprintf("UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'", $tablename);
Non si può avere '
s escape nelle stringhe delimitate da '
. In entrambi i "
s escape nelle stringhe delimitate da "
. Per sfuggire la stringa delimitatore è necessario anteporre un carattere \
.