Я получил ошибку, показанную выше. Я посмотрел на этом сайте, но я не могу найти правильное решение, чтобы решить мою проблему.
Я пытаюсь написатьучебный класс. Следующий код пока мой код.
class User
{
private $_id;
public function __construct($id)
{
$this->_id = $id;
}
public function getUsername()
{
global $db;
$query = $db->prepare("SELECT * FROM users WHERE id = ?");
$query->bindValue(1, $this->_id);
$query->execute();
}
}
Результатом является следующая ошибка, и я не знаю, как это исправить …
Фатальная ошибка: Вызов функции-члена bindValue () для необъекта в
Редактировать:
Вот как я это использую:
$user = new User($_SESSION['logged_in']);
$username = $user->getUsername();
Примечание: session_start();
загружен.
Использование глобальной переменной действительно плохой подход.
Прочитайте эту запись в блоге:
Это объясняет, почему это не очень хорошая идея.
Если $db
имеет значение null, скорее всего, prepare не будет возвращать объект оператора.
затем $query
не будет государством, поэтому bindValue
не узнают.
Вместо этого передайте соединение вашему классу и просто прекратите использовать глобальные переменные.
А также ваша функция не возвращала никаких данных, я изменяю их, чтобы вернуть имя пользователя.
class User
{
private $_id;
private $db;
public function __construct($id, $conn)
{
$this->_id = $id;
$this->$db = $conn;
}
public function getUsername()
{
$query = $this->db->prepare("SELECT username FROM users WHERE id = ?");
$query->bindValue(1, $this->_id);
$query->execute();
$data = $query->fetch();
return $data['username'];
}
}
Использование:
session_start();
$id = $_SESSION['logged_in'];
$conn = new PDO('xxx');
$user = new User($id, $conn);
$username = $user->getUsername();
Мне кажется, что ваш объект запроса $db
не $query
… если так, то это нормально, что $ запрос отсутствует bindValue()
потому что это не объект, поэтому у него нет никаких методов.
попробуй использовать $db->bindValue()
и дайте нам знать, как все прошло: D