如果您在全局范围(或函数/方法以外的任何作用域)中声明/ 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