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.

http://bobby-tables.com/php.html

Prova questo:

$query = sprintf('UPDATE% sSETstock= :amount WHEREitemname= '.$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% sSETstock= :amount WHEREitemname= '$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 \.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top