Неустранимая ошибка: вызов функции-члена bindValue () для необъекта в

Я получил ошибку, показанную выше. Я посмотрел на этом сайте, но я не могу найти правильное решение, чтобы решить мою проблему.

Я пытаюсь написатьучебный класс. Следующий код пока мой код.

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(); загружен.

0

Решение

Использование глобальной переменной действительно плохой подход.

Прочитайте эту запись в блоге:

Глобальные переменные плохие

Это объясняет, почему это не очень хорошая идея.

Если $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();
2

Другие решения

Мне кажется, что ваш объект запроса $db не $query… если так, то это нормально, что $ запрос отсутствует bindValue()потому что это не объект, поэтому у него нет никаких методов.

попробуй использовать $db->bindValue() и дайте нам знать, как все прошло: D

-1

По вопросам рекламы [email protected]