如果您在全局範圍(或函數/方法以外的任何作用域)中聲明/ instatiated $db
,並試圖在函數/方法中使用它,它將不起作用。 Read this。
如果您的PDO對象在方法調用之前未實例化或未設置,您可能也會收到此錯誤。請嘗試var_dump(is_object($db));
和/或var_dump($db);
進行檢查。
你需要做以下操作之一:在方法中
實例化PDO對象(可能是不實際的或最好的選擇):
function foo() {
$db = new PDO(...);
...
$query = $db->query(...);
}
實例化PDO對象在全球範圍內使用global
關鍵字將其導入方法:
$db = new PDO(...);
function foo() {
global $db;
$query = $db->query(...);
}
在全局範圍內實例化PDO對象並使用超全局$GLOBALS
數組來訪問它。
$db = new PDO(...);
function foo() {
$query = $GLOBALS['db']->query(...);
}
實例化PDO對象在全球範圍內,並將其作爲參數傳遞給你的方法。
$db = new PDO(...);
function foo ($db) {
$query = $db->query(...);
}
foo($db);
實例化在全球範圍內的PDO對象,並傳遞到你的對象作爲一個屬性。
$db = new PDO(...);
class foo {
public $db;
public function bar ($db) {
$query = $this->db->query(...);
}
}
$foo = new foo;
$foo->db = $db;
$foo->bar($db);
可能。很難說任何背景。 – deceze
這是全球性的,否則你會收到一個未知的變量錯誤。 這可能不是PDO的一個實例,爲什麼或如何 - 我無法分辨。 –
你是否在'$ db = new PDO(...)'之後但在$ db-> query'之前重新聲明'$ db'? – Mat