2013-11-02 57 views
3

我試圖用PDO連接到我的數據庫,並在頁面上顯示一些博文。 然而I'm收到此錯誤信息:未捕獲的異常'PDOException'消息'無效的數據源名'

Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in index.php on line 61...

從來就一直在尋找幫助,但確實不容弄清楚什麼是錯的,如果任何人有它是非常讚賞的任何想法!

我有一個單獨的包含在index.php文件中的connect.inc.php文件。

這是connect.inc.php文件:

<?php 
class DB extends PDO 
{ 
function database_connection() { 
    $db_host = "localhost"; 
    $db_name = "blogdata"; 
    $db_user = "username"; 
    $db_pass = "password"; 
    try { 
    global $db_host, $db_name, $db_user, $db_pass; 
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 
    } 
    catch(PDOException $e) { 
    die('Query failed: ' . $e->getMessage()); 
} 
} 
} 
?> 

這是在其中指出了錯誤信息index.php文件的部分:

<?php 
    require 'connect.inc.php'; 
    $db = new DB('blogdata'); 

    $query = "SELECT * FROM blogposts"; 
    if ($result = $db->query($query)) { 
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
     echo ' 
      <section id="content"> 
      <article class="post_title"><h3> ', $row['title'],' </h3></article> 
      <article class="post_message"> ', nl2br ($row['message']),' </article> 
      <article class="post_time"> ',$row['time'],' </article> 
      </section> 
      '; 
     } 
    } ; 
    ?> 
+1

首先,這段代碼非常不一致。 DB類具有'database_connection()'方法,這個方法無處可用。你用'blogdata'參數來調用它,但是再次沒有使用它。它真的*是你運行的實際代碼嗎? –

回答

8

疑難雜症。

由於某種原因,你是延伸你的課程從PDO。所以,你的'blogdata'被視爲DSN。

剛剛擺脫你的DB類,並使用原料PDO

connect.inc.php:

<?php 
$db_host = "localhost"; 
$db_name = "blogdata"; 
$db_user = "username"; 
$db_pass = "password"; 
$db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

的index.php:

<?php 
require 'connect.inc.php'; 

$query = "SELECT * FROM blogposts"; 
$result = $db->query($query); 
while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
+0

謝謝!最後!這解決了問題!不過,我明白你的意思與你的上述評論。我一直在使用連接代碼工作一段時間,並且我首先得到了一個更好的一致代碼,當我不知道我在做什麼時,我搞砸了:/將函數中的連接打包成比使用原始PDO更好? – Lisa

+0

只有當你知道你在做什麼。事實上,PDO *已經是一個連接處理類。它幾乎滿足一般用戶的需求。所以,最好保持原始的PDO。 –

0

你爲什麼在初始化它們後聲明你的數據庫變量是全局變量?我無法測試它,但如果內存服務器會從全局中提取現有值,則覆蓋剛剛聲明的值。

我沒有使用繼承類,但是不同意 - 能夠編寫自定義構造函數意味着你可以設置所有的模式和屬性一次,然後就調用自定義構造函數,系統將自動完成。比每次都要做得乾淨得多。

相關問題