В настоящее время я строю небольшую и простую систему рефералов. Однако у меня возникли проблемы с попыткой вернуть количество рефералов у одного пользователя. Когда новый пользователь регистрирует его, он хранится в столбце с именем «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();
Обновление: еще две ссылки: