格式时遇到问题我的代码使用的sprintf()当我运行代码,我得到这个错误没有错误执行:解析错误:语法错误,意想不到的T_VARIABLE在/上线16的位置

 $query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = '$q'', $tablename);

以上是在我的代码线16。我假设它是语法相关。

我现在接收以下错误:

致命错误:未捕获的异常“PDOException”与消息“SQLSTATE [42000]:语法错误或访问冲突:1065查询是空”在/home/content/63/6563663/html/inventory/pg.php:19堆栈迹:#0 /home/content/63/6563663/html/inventory/pg.php(19):PDOStatement->执行()#1 {主}抛出在/ home /内容/6563663分之63/ HTML /库存/第19行pg.php

这是我的整个代码块:

 <?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();
 }
 }

 ?>

感谢您,似乎我的错误是处理PDO的执行,而不是查询本身。如果任何人有任何的想法将是巨大的。艾伦,我用你的报价方法,并通过我运行mysql_real_escape_string查询()。

没有正确的解决方案

其他提示

请不要建立SQL查询的变量了。使用绑定变量。

请参阅 http://bobby-tables.com/php.html

尝试这种情况:

$query = sprintf('UPDATE%sSETstock= :amount WHEREitemname= '.$q, $tablename);

您需要把字符串和变量之间的连接运算符将它们组合在一起。您也可以''后摆脱$q的,因为它完全不改变的字符串。

编辑:

我相信我误解你正在尝试做的。尝试这个代替:

$query = sprintf("UPDATE%sSETstock= :amount WHEREitemname= '$q'", $tablename);

通过改变你的PHP字符串是双引号内,你不需要逃避你的单引号和$ Q将扩大到它的价值。

此外,还要确保在运行$ q和通过mysql_real_escape_string() $表名,以防止SQL注入。

像这样:

$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'', $tablename);

$query = sprintf("UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'", $tablename);

您不能在由'分隔字符串转义's。无论在字符串转义"s分隔的"。为了逃避字符串分隔符,你需要预先设置一个\字符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top