2012-09-26 35 views
0
從新手

問題:-)顯示使用PHP PDO

我想我的MySQL查詢語法轉換成PDO,但有一些問題的入門MySQL的SELECT語句。

我在我的頁面中有一個名爲dbc.php的包含文件。包含代碼:

define ("DB_HOST", "localhost"); // set database host 
define ("DB_USER", "dbuser"); // set database user 
define ("DB_PASS","dbpass"); // set database password 
define ("DB_NAME","dbname"); // set database name 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection."); 
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database"); 

我的網頁代碼則是:

<?php 
include 'dbc.php'; 
page_protect(); 

function get_users($db) { 
$getusers = $db->query('SELECT employeeid, fullname FROM Persons order by fullname asc'); 
} 

?> 

我想顯示用下面的代碼表輸出:

<table> 
    <tr> 
     <th> Full Name</th> 
    </tr> 
    <?      
     while($row = $getusers->fetch(PDO::FETCH_ASSOC)) 
     { 
    ?> 
    <tr> 
     <td> 
     <? 
     echo $row['fullname']; 
     ?> 
     </td> 
    </tr> 
     <? 
     } 
     ?> 
</table> 

這目前輸出錯誤:

Fatal error: Call to a member function fetch() on a non-object in /home/she/public_html/versionfour/people.php on line 170 

170行是我的'while($ row = $ getusers-> fetch(PDO :: FETCH_ASSOC))'語句。

我知道我錯過了一些簡單的東西,可能還沒有完全理解PDO。

任何幫助apprecaited。

感謝和問候, [R

回答

3

此問題涉及到「$ getUsers」變量的範圍。因爲函數沒有返回它的值,所以HTML文件無法訪問它,並且fetch()方法試圖在未定義的值上調用,因此錯誤中的「非對象」部分。

<?php 
    /** Include the db file which should define a connection as so 
    $db = new PDO('dblib:host=$hostname;dbname=$dbName', $user, $pass); etc 
    **/ 
    include 'dbc.php'; 

    page_protect(); 

    function get_users($db) 
    { 
    $result = $db->query("SELECT employeeid, fullname FROM Persons order by fullname asc"); 
    return $result; 
    } 
    $users = get_users($db); 

    /** $users->fetch() can now be used **/ 

?> 

你也應該考慮一些錯誤檢查,以確保返回的DB的結果實際上是一個PDO的結果,或者您可能仍然遇到此問題。

+0

謝謝@Alex。快速的問題,我明白PDO可以顯示數據庫連接細節,如果它失敗。我已經添加了'$ db = new PDO('mysql:host = localhost; dbname = she_she',$ username,$ password);'到我的dbc.php。我需要對'異常'進行任何修改嗎?再次感謝。 – Smudger

+0

@Smudger沒問題,很高興我能幫到你。在某些情況下,您必須擁有有效的結果,因爲您依賴該結果才能正確執行其餘代碼。當它來到數據庫連接(就像你的情況),你必須*總是*假設他們會出錯並相應地編碼。看看* try/catch語句*這些是讓我們*優雅地降級* – AlexP

+0

謝謝@亞馬遜,非常感謝。 – Smudger

4

你的頁面代碼處理$db就像是一個PDO對象時,它不是。您的設置必須包含一行,如$db = new PDO('CONNECTION STRING HERE');(請參閱the documentation來確定數據庫類型的連接字符串;您不會提及這是mysql,mssql還是其他),而不是調用mysql_connect

+1

+1錯過了:-) – AlexP