好的,我看到一些類似的問題,但他們的例子都使用PHP類...我的不是。也許這就是問題所在?我不應該需要上課,因爲我的網站在這個時候非常簡單。PDO對象不在函數範圍內
無論如何,我正在嘗試使用PDO連接到MySQL數據庫。我在一個名爲config.php
的文件中連接到數據庫,並在index.php
中使用require_once()
包含此文件。
我可以成功地從另一個名爲process.php
的文件查詢數據庫,但問題在該文件中的函數內;看起來我的DBO對象超出了該功能的範圍。
下面是相關的代碼片段:
的index.php
require_once('./lib/config.php');
的config.php
// tested and connects fine
$pdo = new PDO('mysql:host=' . $hostname . ';dbname=' . $dbname, $username, $password, array(
PDO::ATTR_PERSISTENT => true
));
process.php
<?php
...
// can call $pdo fine in this file outside of functions
...
function authenticate($u, $p) {
// can't call $pdo in here, error says $pdo is non-object
$que = $pdo->query('select user_id, user_pass from users where user_name = \'' . $u . '\' limit 1');
...
}
?>
順便說一下,我使用的是PDO,因爲我有類似的問題mysqli
,並試圖擺脫mysql
,這顯然是貶值和泄氣。
編輯:我應該基於的回答,我在這個問題上得到了數首先澄清:我曾嘗試通$ PDO作爲一個參數去功能,隨着錯誤消息沒有運氣或改變。
解決方法:好的,顯然問題是我需要在我的process.php文件中添加require_once('config.php')
。不知道爲什麼(當index.php首先運行時,是不是已經包含它了?)。然後,我成功地將$pdo
作爲參數傳遞給我的功能,並且瞧。
在您的身份驗證功能,'$ pdo'超出範圍。將其作爲參數傳入,或將其聲明爲全局。 – andrewsi 2013-05-02 15:36:15
如果你確實需要,在你的函數內聲明它爲'global $ pdo;'。你最好通過它,或者把'authenticate'放在課堂上。 – Aleph 2013-05-02 15:36:28
使用適當的類和對象,然後使用依賴注入。 – 2013-05-02 15:36:54