我已经在connection.php中创建了数据库连接,并将其包含在insert.php中。然后在构造函数中扩展dbconnection类,然后创建一个函数getdata(),在这里我运行select查询,同时运行我的文件,只得到连接成功的消息。我尝试了所有可能的选择,并在stackoverflow和其他地方寻找解决方案,但失败了。
这是我的connection.php文件
<?php
class DBConnection
{
private $servername;
private $username;
private $password;
private $dbname;
private $conn;
public function __construct()
{
$this->servername = "localhost";
$this->username = "root";
$this->password = "";
$this->dbname = "pdo_test";
try {
$this->conn = new PDO("mysql:host=$this->servername;dbname=$this->dbname", $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connected successfully";
}catch(PDOException $e){
echo "Error: " . $e->getMessage();
}
}
}
?>
我的insert.php
<?php
include('connection.php');
class insertData extends DBConnection
{
private $conn;
public function __construct()
{
$this->conn = new DBConnection();
}
public function getData()
{
$sql = "SELECT * FROM user";
$stmt = $this->conn->prepare($sql);
$res = $stmt->execute();
print_r($res->fetch());
}
}
$id = new insertData();
echo $id->getData();
?>
有人能指出我的代码错误吗?提前谢谢
注意:虽然没有连接,但更多信息,我使用的是ubuntu18.04
1条答案
按热度按时间68bkxrlz1#
虽然我认为你的类层次结构是不对的,但问题是你的
insertData
类,则有一个构造函数创建DBConnection
示例并将其分配给$this->conn
. 所以当你提到$this->conn
你指的是DBConnection
示例而不是PDO
对象。所以你的电话将失败为
DBConnection
没有一个prepare()
方法。相反,如果删除构造函数并将其留给基类,则会创建连接并将其分配给
$this->conn
. 你必须改变的一件事是$conn
需要定义为protected
允许派生类访问它。同时确保
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();