【问题标题】:Parsing error unexprected '*解析错误意外'*
【发布时间】:2018-07-06 17:10:24
【问题描述】:

我正在尝试在 PHP(使用 mariadb)中创建一个显示表中行数的脚本,并且我正在尝试使用以下脚本:

echo $conn->query('SELECT COUNT(*) FROM testtable')->fetchObject()->count(*);

但是当我执行它时,我得到以下错误:

解析错误:语法错误,意外的“*”。我怎样才能解决这个问题? 我该如何解决它

【问题讨论】:

标签: php mysql mariadb


【解决方案1】:

代码

echo $conn->query('SELECT COUNT(*) AS rownum FROM testtable')->fetchObject()->rownum;

为我工作

【讨论】:

  • 没错,使用别名也可以,但由于您仍然只是获得一个值,因此 fetchColumn 仍然比使用 fetchObject 更有意义。
【解决方案2】:

只需要获取一个值时使用 fetchColumn。

echo $conn->query('SELECT COUNT(*) FROM testtable')->fetchColumn();

您的错误是因为count(*) 会在第一个参数为* 的对象上调用名为count 的方法。只是一个不带引号的星号将导致 PHP 中的语法错误。相反,您需要使用 $obj->{'COUNT(*)'} 来访问名称为 COUNT(*) 的属性,但使用 fetchColumn 要简单得多。

【讨论】:

  • 另外,命名该死的东西要容易得多...COUNT(*) as Num
【解决方案3】:

你试过这样吗? fetchColumn()

$result = $conn->query("SELECT COUNT(*) FROM testtable");
echo $result->fetchColumn();

查看示例:http://php.net/manual/en/pdostatement.fetchcolumn.php#72609

【讨论】:

  • 当我这样做时,我得到'stdClass 类的对象无法转换为字符串'
  • @coolcuber 我犯了一个错误,你需要 fetchColumn 在这里。请看我的编辑
  • @Devon 很抱歉,我没有复制您的答案。我只是忘记了引用和方法名称。请参阅我添加了 php.net 的参考
  • 好的。当您第一次回答问题时,您的答案完全不同,但在我添加答案后 3 分钟内使用了相同的方法,这看起来很奇怪。
  • @Devon 我同意了,我真的很抱歉“我只是在这里忘记了 fetch__() 方法名称”但是当我看到 php.net 参考。我只是把它编辑回来。很抱歉给您带来了困惑:) 希望您能理解
【解决方案4】:

错误是由于->count(*) 中的最后一个星号造成的,但即使如 Devon 所指出的那样已修复此问题,它也无法正常工作,因为fetchObject() 返回的内容没有count() 方法。

请参阅 fetchObject here 和 fetchColumn here 的文档。

你可以试试

echo $conn->query('SELECT COUNT(*) FROM testtable')->fetchObject();

要获取整行,但由于该行只有一列,您只需要->fetchColumn(0)

【讨论】:

  • 这是一个从fetchObject返回的stdClass对象,这里不会有类方法。
  • @Devon 谢谢,更正了我的回答并支持你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2012-06-17
  • 2013-10-11
  • 2015-05-11
相关资源
最近更新 更多