【问题标题】:Getting parse error while retrieving details from database and also when using heredoc syntax从数据库中检索详细信息以及使用heredoc语法时出现解析错误
【发布时间】:2014-09-26 11:59:37
【问题描述】:

我一直在做一个 PHP 项目,我在一个文件中遇到错误,即

解析错误:语法错误、意外的 '' (T_ENCAPSED_AND_WHITESPACE)、需要标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING) 在 C:\xampp\htdocs\simple\directory.php 第 91 行

我的代码是:

$s = mysql_query("select * from user_reg where mid='$mid'");
$f = mysql_fetch_array($s);
<?php
    while($f = mysql_fetch_array($s))
    { echo "
    <div class='divtable'>
    <table border='0' cellspacing='10px'>
    <tr><td rowspan='4' align='center'><img src='user/$imgsrc' alt='$name' height='100px' width='100px' border='0' title=$name' /></td><th>Name</th><td><?php echo $f['name'];?></td></tr>
    <tr><th>Specialized In</th><td><?php echo $f['spl'];?></td></tr>
    <tr><th>Degrees</th><td><?php echo $f['de'];?></td></tr>
    </table>
    </div>";
    }
?>

在这里,我正在从 MySql 数据库中检索图像的来源。 我也曾尝试通过使用 heredoc 语法来解决这个问题。

<?php
    while($f = mysql_fetch_array($s))
    { echo <<<abc
    <div class='divtable'>
    <table border='0' cellspacing='10px'>
    <tr><td rowspan='4' align='center'><img src='user/$imgsrc' alt='$name' height='100px' width='100px' border='0' title=$name' /></td><th>Name</th><td>$f['name']</td></tr>
    <tr><th>Specialized In</th><td>$f['spl']</td></tr>
    <tr><th>Degrees</th><td>$f['de']</td></tr>
    </table>
    </div>";
    abc;
    }
?>

但错误与上述相同.. 请帮我解决这个问题

我正在使用这个 while 循环在我的网站上显示我的用户的详细信息,包括照片,是否有任何与 while 相同的循环来完成我的工作。

在此先感谢...

【问题讨论】:

  • 错误信息说问题出在第 91 行。那是你代码的哪一行?
  • $s = mysql_query("select * from user_reg where mid='$mid'"); $f = mysql_fetch_array($s); &lt;?php ... - 这是您的实际代码吗?另外,您的abc; 前面有空格吗? 非常重要。
  • @Ghost - 您删除了 OP 代码中 abc; 之前的空格(在编辑中),这可能是 OP 代码的错误之一。我做了一个回滚。编辑代码时请小心。这可能会影响我的回答。

标签: php html mysql while-loop heredoc


【解决方案1】:

编辑:

An (code) edit 是通过删除 abc; 之前不应该被批准的空格来完成的。

A rollback 已完成,因为这可能是导致错误的原因。


(解析)错误是由$f['name'] 中的单引号和所有其他使用$f 变量从数据库中获取行,删除引号$f[name] 并对其他人执行相同操作引起的。

另外,这个abc; 在你的&lt;/div&gt;"; 之前

在此之前和/或之后应该有任何东西。看起来好像前面有 4 个空格。

    </div>";
    abc;
^^^^

删除它之前的所有空格,如果您的代码中abc; 之前确实有 4 个空格。

Heredoc 说:

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

警告 需要注意的是,带有结束标识符的行不能包含其他字符,分号 (;) 除外。这尤其意味着标识符可能不会缩进,并且分号之前或之后可能没有任何空格或制表符。同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符。这在 UNIX 系统上是 \n,包括 Mac OS X。结束分隔符后还必须跟一个换行符。

如果这条规则被破坏并且关闭标识符不是“干净的”,它将不会被认为是一个关闭标识符,PHP 将继续寻找一个。如果在当前文件结尾之前没有找到合适的结束标识符,则会在最后一行出现解析错误。

Heredocs 不能用于初始化类属性。自 PHP 5.3 起,此限制仅对包含变量的 heredocs 有效。


另外,echo &lt;&lt;&lt;abc 后面似乎没有任何空格,但是请记住,标识符后面不应该有任何内容;在你的情况下,这是和关注abc

这样做会产生如下错误:

解析错误:语法错误,意外的'

【讨论】:

  • 抱歉修改是的,可能会导致重大问题,感谢您的提醒
  • @Ghost 不客气,谢谢。如果不是heredoc-related 问题,那就没问题了。干杯
  • 我尝试过在heredoc语法前后删除空格,但我再次遇到同样的错误......实际上我的moto是通过检索源来在一页中打印我所有用户的图像来自数据库的图像。现在我正在通过使用 标签来显示用户信息。
  • @user3739755 您是否也照顾了$f['name']$f[name],同时为所有其他人做同样的事情?我已经对此进行了测试,从头到尾都有相同的错误。
【解决方案2】:

尝试这样使用。

$s = mysql_query("select * from user_reg where mid='".trim($mid)."'");

【讨论】:

  • 嗨,这可以很好地解决问题 - 但您应该知道 Stack Overflow 上有很多新手,他们可以从您的专业知识中学到一两件事。一点解释总是好的。不要忘记,对你来说显而易见的事情对他们来说可能并不那么明显。 :)
猜你喜欢
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 2018-04-07
  • 2019-06-18
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2017-01-13
相关资源
最近更新 更多