意外的 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 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章