Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sprintf()与mysql_query()的比较_Php_Sql_Mysql_Printf_Mysql Error 1065 - Fatal编程技术网

Php sprintf()与mysql_query()的比较

Php sprintf()与mysql_query()的比较,php,sql,mysql,printf,mysql-error-1065,Php,Sql,Mysql,Printf,Mysql Error 1065,当我运行代码时,使用sprintf()格式化代码以无误执行时遇到问题,我得到以下错误:Parse error:syntax error,第16行的/location中出现意外的T_变量 $query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = '$q'', $tablename); 上面是我代码中的第16行。我假设它与语法有关 我现在收到以下错误: 致命错误:未捕获异常“PDOException”,消息为“S

当我运行代码时,使用sprintf()格式化代码以无误执行时遇到问题,我得到以下错误:Parse error:syntax error,第16行的/location中出现意外的T_变量

 $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->execute()#1{main}在第19行输入/home/content/63/6563663/html/inventory/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执行,而不是查询本身。如果有人对此有任何想法,那就太好了。Alan,我使用了你的方法来引用,并且正在通过mysql\u real\u escape\u string()运行查询

试试这个:

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

您需要在字符串和变量之间放置一个串联运算符,以便将它们组合在一起。您还可以在
$q
之后去掉
'
,因为它根本不会更改字符串

编辑:

我相信我误解了你的意图。请尝试以下方法:

$query=sprintf(“更新
%s
SET
stock
=:金额,其中
itemname
=”$q',$tablename)

通过将PHP字符串更改为双引号内,您不需要转义单引号,$q将扩展为其值

另外,请确保通过
mysql\u real\u escape\u string()
运行$q和$tablename以防止SQL注入。

尝试以下操作:

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

您需要在字符串和变量之间放置一个串联运算符,以便将它们组合在一起。您还可以在
$q
之后去掉
'
,因为它根本不会更改字符串

编辑:

我相信我误解了你的意图。请尝试以下方法:

$query=sprintf(“更新
%s
SET
stock
=:金额,其中
itemname
=”$q',$tablename)

通过将PHP字符串更改为双引号内,您不需要转义单引号,$q将扩展为其值

另外,请确保通过
mysql\u real\u escape\u string()
运行$q和$tablename,以防止SQL注入。

类似于:

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

您不能在由
分隔的字符串中包含未转义的
。未scaped的
在字符串中,由
分隔。要转义字符串分隔符,需要在前面加上一个
\
字符。

如下所示:

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


您不能在由
分隔的字符串中包含未转义的
。未scaped的
在字符串中,由
分隔。要转义字符串分隔符,需要在前面加上一个
\
字符。

请不要用变量生成SQL查询。使用绑定变量


请参见

请不要用变量构建SQL查询。使用绑定变量


请参见

您有一个语法错误:您需要转义单引号
\'
$q
来自哪里?它是正确的
mysql\u real\u escape\u string()
ed?$q只是我前面代码块中定义的一个简单字符串。我很想知道表名是否被反勾中的单引号括起来。您能否在执行之前更新问题以包含查询打印输出?叹气,
$query!==$UpdateQuery
,在开发时启用通知以捕获那些讨厌的不存在的变量。您有一个语法错误:您需要转义单引号
\'
$q
来自哪里?它是正确的
mysql\u real\u escape\u string()
ed?$q只是我前面代码块中定义的一个简单字符串。我很想知道表名是否被反勾中的单引号括起来。您能否在执行之前更新问题以包含查询打印输出?叹气,
$query!==$UpdateQuery
,在开发时启用通知以捕获那些讨厌的不存在的变量。