Обрезаемая фатальная ошибка: объект класса PDOStatement не может быть преобразован в строку в /home/refined/public_html/refer.php в строке 30

В настоящее время я строю небольшую и простую систему рефералов. Однако у меня возникли проблемы с попыткой вернуть количество рефералов у одного пользователя. Когда новый пользователь регистрирует его, он хранится в столбце с именем «referid», и этот идентификатор соответствует идентификатору имени пользователя, которое направило его.

Однако, пытаясь найти, сколько раз идентификатор пользователя упоминается в столбце «referid», а затем повторяет его, я получаю эту ошибку:

Catchable fatal error: Object of class PDOStatement could not be converted to string in /home/refined/public_html/refer.php on line 30 

Я не могу понять, что на самом деле вызывает это. Я сделал быстрый google, и все, что я мог видеть, это то, что PDO несовместим со строками или чем-то еще. Я раньше не использовал PHP и MYSQL, поэтому я не уверен, как «не» использовать PDO.

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

Любая помощь очень ценится.

Давайте проанализируем ваш код:

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

… где PDO :: prepare () определяется как:

PDOStatement PDO :: prepare (строка $ statement [, array $ driver_options = array ()])

Таким образом, он возвращает объект. Но через две строки вы попытаетесь напечатать объект:

 echo($checknumber); 

Если вы проверите какие-либо примеры использования в руководстве, вы увидите, что вам нужно вызвать один из методов 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(); 

Обновление: еще две ссылки:

  • Доступные методы PDOStatement
  • Массивы в PHP