可捕获的致命错误:第30行的/home/refined/public_html/refer.php中无法将类PDOStatement的对象转换为字符串

use*_*896 1 php mysql pdo

我目前正在建立一个小而简单的推荐系统.但是,我无法尝试返回单个用户拥有的推荐数量.当新用户注册它时,它存储在名为"referid"的列中,并且那里的ID对应于引用他的用户名.

但是,在尝试查找"referid"列中提及用户ID的次数然后回显它时,我收到此错误:

Catchable fatal error: Object of class PDOStatement could not be converted to string in /home/refined/public_html/refer.php on line 30
Run Code Online (Sandbox Code Playgroud)

我无法理解究竟是什么导致了这一点.我做了一个快速谷歌,我只能看到PDO与字符串或其他东西不兼容.我之前没有使用过PHP和MYSQL,所以我不确定如何"不"使用PDO.

<?php
$checknumber = $odb -> prepare("SELECT COUNT('referid') FROM `users` WHERE `ID` = :ID");
$checknumber -> execute(array(':ID' => $_SESSION['ID']));
echo($checknumber);
?>
Run Code Online (Sandbox Code Playgroud)

很感谢任何形式的帮助.

Álv*_*lez 5

让我们分析你的代码:

$checknumber = $odb -> prepare("SELECT COUNT('referid') FROM `users` WHERE `ID` = :ID");
Run Code Online (Sandbox Code Playgroud)

...其中PDO :: prepare()定义为:

PDOStatement PDO :: prepare(string $ statement [,array $ driver_options = array()])

所以它返回一个对象.但是两行后你尝试打印对象:

echo($checknumber);
Run Code Online (Sandbox Code Playgroud)

如果您检查手册中的任何用法示例,您将看到需要调用其中一种PDOStatement方法来提取查询结果,例如:

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
Run Code Online (Sandbox Code Playgroud)

更新:另外两个链接: