【问题标题】:unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING error [duplicate]意外的 T_ENCAPSED_AND_WHITESPACE,预期 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 错误 [重复]
【发布时间】: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 的东西。)

标签: php mysql select


【解决方案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'];
        ?>
        

        您的查询中有语法错误。

        【讨论】:

        猜你喜欢
        • 2017-04-08
        • 2012-01-14
        • 1970-01-01
        • 2011-11-07
        • 2014-07-03
        • 2023-03-11
        • 2015-06-26
        • 1970-01-01
        相关资源
        最近更新 更多