[英]PDO connection class
因此,我正在嘗試構建一個簡單的PDO連接類,以便可以在需要訪問數據庫的任何時候創建一個數據庫對象,但是無論嘗試如何,都會遇到相同的錯誤。
這是我的數據庫類代碼
<?php
class DbConnect
{
// Database login vars
private $dbHostname = 'localhost';
private $dbDatabase = 'database';
private $dbUsername = 'username';
private $dbPassword = 'password';
public $db = null;
public function connect()
{
try
{
$db = new PDO("mysql:host=".$this->dbHostname.";dbname=".$this->dbDatabase, $this->dbUsername, $this->dbPassword); // Establish DB connection
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set error handling
return $db;
}
catch(PDOException $e)
{
echo "It seems there was an error. Please refresh your browser and try again. ".$e->getMessage();
}
}
}
?>
這是我嘗試在其中使用的類的代碼:
<?php
session_start();
require 'DbConnect.php';
class User
{
public function bindParams()
{
$DbConnect = new DbConnect();
$sql = $DbConnect->connect();
$sql->prepare("insert into dbobjectex(firstName, lastName) values (:firstName, :lastName)");
$sql->bindParam(':firstName', $_SESSION['firstName']);
$sql->bindParam(':lastName', $_SESSION['lastName']);
$sql->execute();
}
}
?>
然后從我創建User類的位置調用bindParams()。 我一直收到的兩個錯誤是“ NetworkError:500 Internal Server Error”和“未聲明HTML文檔的字符編碼”。 對我在這里做錯的任何想法嗎? 感謝您的任何建議。
What am I doing wrong here?
-很多東西,但是最不明顯的一件事是:在DbConnect
類定義的末尾,您正在關閉php標簽?>
,對於包含文件和包含文件 ,必須盡可能避免 使用它 。 在您的情況下,這樣做的結果是過早發送了標頭,從而說明了您的第二個錯誤。
除此之外,每次實例化用戶類時,都在創建一個新的PDO實例:將其分配給connect
成員函數本地的變量,至少將$db
替換$db
$this->db
。 但最重要的是,我同意@sabre:為什么PDO需要一個額外的包裝器? 特別是一個只實例化並返回pdo實例的實例,僅在需要時創建一個抽象類來處理連接。
您可能要檢查的另一件事是天氣或包含路徑是否正確,並閱讀有關自動加載類的文檔 。 一旦擁有大量的類庫,它將為您省去很多麻煩。 這可能會解釋您的第一個錯誤,就像?>
標記一樣,但是為了安全起見:請使用require_once
,而不是require
:包括(從而重新定義)第二個類不是您想要在此處做的事情所有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.