意外的 T_ENCAPSED_AND_WHITESPACE,预期 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 错误 [重复]

Posted

技术标签:

【中文标题】意外的 T_ENCAPSED_AND_WHITESPACE,预期 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 错误 [重复]【英文标题】:unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING error [duplicate] 【发布时间】:2012-03-23 21:24:46 【问题描述】:

我一直盯着这个错误发呆,似乎不知道问题是什么。当我运行查询时,我得到了这个错误:

意外的 T_ENCAPSED_AND_WHITESPACE,需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 在这一行:

$sqlupdate1 = "UPDATE table SET commodity_quantity=$qty WHERE user=$rows['user'] ";

【问题讨论】:

$sqlupdate1 = "UPDATE table SET commodity_quantity=$qty WHERE user=$rows[user]"; 见chapter on variable parsing in strings。我们希望您在将这些值插入查询之前对它们进行清理,而不是使用准备好的语句。 就我而言,我使用HEREDOC 字符串语法进行查询,并缩进了结束标记。它现在在 php 8+ 中是允许的,但该项目是在 PHP 7.2 上的。 (Fetch API 返回 500。很高兴至少能登录到 Google 的东西。) 【参考方案1】:

我的问题也在heredoc中。我把它放在 if/then 语句和分号后面的右括号中。所以我把右括号移到了自己的行,问题就解决了。

我变了:

... ;

到:

... ;

【讨论】:

【参考方案2】:

在我的情况下,heredoc 导致了这个问题。 PHP 7.3 版本没有问题。但是,如果您使用带空格的 heredoc,PHP 7.0.33 会出错。

我的示例代码

$rexpenditure = <<<Expenditure
                  <tr>
                      <td>$row->payment_referencenumber</td>
                      <td>$row->payment_requestdate</td>
                      <td>$row->payment_description</td>
                      <td>$row->payment_fundingsource</td>
                      <td>$row->payment_agencyulo</td>
                      <td>$row->payment_agencyproject</td>
                      <td>$$row->payment_disbustment</td>
                      <td>$row->payment_payeename</td>
                      <td>$row->payment_processpayment</td>
                  </tr>
Expenditure;

PHP 7.0.33 有空格会报错。

【讨论】:

【参考方案3】:

在 $ 符号之前使用 。并且还添加了addlashes函数来转义特殊字符。

$sqlupdate1 = "UPDATE table SET commodity_quantity=".$qty."WHERE user=".addslashes($rows['user'])."'";

【讨论】:

【参考方案4】:

试试这个

echo $sqlupdate1 = "UPDATE table SET commodity_quantity=$qty WHERE user='".$rows['user']."' ";

【讨论】:

谢谢,它起作用了。但是现在假设我想更新不止一行,我该怎么做,因为这段代码似乎不起作用: echo $sqlupdate1 = "UPDATE table SET goods_quantity= $qty AND name=$name WHERE user='".$rows['user']."' ";【参考方案5】:

试试

$sqlupdate1 = "UPDATE table SET commodity_quantity=$qty WHERE user=$rows['user'] ";

双引号字符串中的数组访问需要大括号。

【讨论】:

你不需要添加花括号。您可以简单地省略单引号。 将括号移到美元符号前面【参考方案6】:

将您的代码更改为。

<?php
$sqlupdate1 = "UPDATE table SET commodity_quantity=".$qty."WHERE user=".$rows['user'];
?>

您的查询中有语法错误。

【讨论】:

谢谢,它成功了。但是现在假设我想更新多行我该怎么做,因为这段代码似乎不起作用: echo $sqlupdate1 = "UPDATE table SET goods_quantity= $qty AND name=$name WHERE user='".$rows['user']."' "; 为此,请参阅此。 ***.com/questions/3432/multiple-updates-in-mysql 和 tizag.com/sqlTutorial/sqlupdate.php

以上是关于意外的 T_ENCAPSED_AND_WHITESPACE,预期 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

解析错误:意外的令牌,预期的“,”和语法错误:意外的令牌'['[重复]

如和找到或再次打开意外关闭的网页?

JAVA中提示“意外的类型”啥意思,怎么解决?

HQL 意外的 AST 节点:意外的 AST 节点:

巧合?严重RCE漏洞竟被意外修复

错误消息显示意外的尖括号,但应该没有意外的尖括号