簡體   English   中英

PHP PDO選擇查詢不返回結果

[英]PHP PDO select query return no result

我已經在connection.php中創建了數據庫連接,並將其包含在insert.php中。 然后在構造函數中擴展類DBConnection類,然后創建一個函數getData(),在我運行文件時在其中運行選擇查詢,僅獲得連接成功消息。 我嘗試了所有可能的選項,並在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();

?>

有人可以指出我的代碼錯誤嗎? 提前致謝

注意:盡管沒有任何聯系,但是我仍然使用Ubuntu 18.04獲取更多信息。

盡管我認為您的類層次結構insertData ,但問題是在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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM