【问题标题】:Call to a member function rowCount() on a non-object在非对象上调用成员函数 rowCount()
【发布时间】:2013-10-15 00:47:12
【问题描述】:

我的查询有问题。我最近切换到 PDO,这对我来说有点新鲜。现在我需要在查询中使用 JOIN 从另一个表中获取数据,而无需执行两次。

问题是,我得到这个错误:

Call to a member function rowCount() on a non-object

我不明白问题出在哪里。这就是我的代码的样子:

  $friends_string = "SELECT * FROM `friends` as F, `users` as U WHERE `F.userID` = '$sess_user' AND `F.request` = '0' AND `F.friendID` = 'U.id'";
  $friends = $db->query($friends_string);
  if ($friends->rowCount() > 0) {

while($row = $friends->fetch(PDO::FETCH_ASSOC)) {
    echo "<br /><a href='profile.php?id={$row["id"]}'>{$row["friendID"]}</a>";
  }

} else {
    echo "no Friends";
}

或者简称,就是查询:

SELECT * FROM `friends` as F, `users` as U WHERE `F.userID` = '$sess_user' AND `F.request` = '0' AND `F.friendID` = 'U.id'

我想要的是,从用户 ID 为会话且请求为 0 的朋友那里获取所有行。但是我想在用户中获取这些朋友的 ID,以便我可以链接到他们的个人资料。注意$row["id"]

感谢任何反馈,不必回答我的问题,如果您发现任何问题,请发表评论。谢谢!

【问题讨论】:

  • 如果你执行这个查询会出现什么错误?
  • 在非对象上调用成员函数 rowCount()。
  • 不行,直接在mysql上执行查询。问题在于查询,它不正确,$db-&gt;query 返回FALSE
  • 对不起,我如何直接在mysql上执行呢?
  • 试试 print_r($friends) 看看是什么意思

标签: php mysql sql pdo


【解决方案1】:

不要在 `table.field` 周围放回刻度...你必须把它们放在 `table`.`field` 周围

【讨论】:

  • 这实际上解决了主要问题。现在我只需要重组我的查询。谢谢!
【解决方案2】:

用这个改变你的查询:

$query = "SELECT * FROM `friends` as F INNER JOIN `users` as U ON `F.friendID` = `U.id` WHERE `F.userID` = '{$sess_user}' AND `F.request` = '0'";

并将其添加到您的连接中,它会显示错误:

 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set Errorhandling to Exception

【讨论】:

  • 仍然得到错误。仔细检查了字符串,它是正确的。值在那里,它应该找到它们。
  • 回显查询,连接到您的 mysql 服务器 (mysql -u LOGIN -p) 并执行它并查看错误。答案已编辑
  • 好的。得到这个:未捕获的异常 'PDOException' 带有消息'SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列'F.userID'在
【解决方案3】:

恕我直言! 我在 PDO 上看到过类似的问题... 和... 我认为它更有可能使用纯 SQL 来完成所有操作,但使用 PDO 则更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-26
    • 2012-04-20
    • 2015-05-01
    • 2014-08-07
    • 2013-12-01
    • 2015-12-23
    • 2015-08-29
    • 2015-02-02
    相关资源
    最近更新 更多