Хотя я думаю, что ваша иерархия классов неверна, проблема в том, что в вашем insertData
классе есть конструктор, который создает экземпляр DBConnection
и присваивает его $this->conn
.Поэтому, когда вы ссылаетесь на $this->conn
, вы ссылаетесь на DBConnection
экземпляр, а не на PDO
объект.Таким образом, ваш вызов
$stmt = $this->conn->prepare($sql);
завершится неудачей, так как DBConnection
не имеет prepare()
метода.
Если вместо этого вы удалите конструктор и оставите его для базового класса, этосоздаст соединение и присвоит его $this->conn
.Вам нужно изменить одну вещь: $conn
необходимо определить как protected
, чтобы позволить производному классу получить к ней доступ.
protected $conn;
Также убедитесь, что когда вы execute()
, это просто возвращает, есливыполнение выполнено успешно, результат прибывает из fetch()
class insertData extends DBConnection
{
public function getData()
{
$sql = "SELECT * FROM user";
$stmt = $this->conn->prepare($sql);
$stmt->execute();
$res = $stmt->fetch();
print_r($res);
}
}
Обновление:
Чтобы проверить, что происходит, вы можете попробовать ...
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$id = new insertData();
echo $id->getData();