[英]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.