php pdo select查询不返回结果

rdrgkggo  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(448)

我已经在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

68bkxrlz

68bkxrlz1#

虽然我认为你的类层次结构是不对的,但问题是你的 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();

相关问题