簡體   English   中英

PDO連接等級

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

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