在我看来,我有一个奇怪的问题。下面的部分工作正常
$sql = "
UPDATE
".$table[0]."
SET
p_title = '".$_POST['p_title']."',
p_date = '".$_POST['p_date']."'
WHERE
p_id = '".$_POST['p_id']."'
";
if(!$db->exec($sql)){
echo($defaults->throwError('MySql error',$sql,implode(":",$db->errorInfo())));
}else{
$defaults->writeLog($table,$db->lastInsertId(),'update');
}
但是当我尝试下面的代码时,我得到一个'致命错误:在'
中的非对象上调用成员函数exec()
class Defaults{
[..]
public function query($sql){
if(!$db->exec($sql)){
echo($defaults->throwError('MySql error',$sql,implode(":",$db->errorInfo())));
}else{
$defaults->writeLog($table,$db->lastInsertId(),'update');
}
}
[..]
}
然后在我的页面上
$defaults = new Defaults();
$defaults->query("
UPDATE
".$table[0]."
SET
p_title = '".$_POST['p_title']."',
p_date = '".$_POST['p_date']."'
WHERE
p_id = '".$_POST['p_id']."'
");
怎么回事?
啊,这是关于班上的$db
。但是,当我做像
public function query($sql){
$db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
if(!$db->exec($sql)){
echo($defaults->throwError('MySql error',$sql,implode(":",$db->errorInfo())));
}else{
$defaults->writeLog($table,$db->lastInsertId(),'update');
}
}
我得到一个讨厌的
Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in /class.defaults.php:8 Stack trace: #0 /class.defaults.php(8): PDO->__construct('', NULL, NULL) #1 /class.form.php(269): Defaults->query('?????????UPDATE...') #2 /module.projectbeheer.edit.php(25): Form->proceed('update', 'p_id', 'rows', Array, Array, '') #3 /class.content.php(16): include_once('/path/') #4 /administratie.php(72): Content->write('/BraamsArchief/...') #5 {main} thrown in /class.defaults.php on line 8
答案 0 :(得分:0)
可以在Defaults中访问$ db吗?
尝试在函数查询
中添加global $db;
答案 1 :(得分:0)
您必须提供$ db作为全局属性或类属性。否则,您无法在方法范围内访问它。
所以:
public function query($sql) {
global $db;
// now you can use $db as you would in global scope
}
或者您必须使用数据库连接对象设置类属性(例如$ this-> db),并在方法中使用$ this-> db访问它。
请注意,如果使用global
解决方案,则需要确保在最初定义变量时始终将变量称为$ db。否则,您的方法可能无法找到它,您将收到相同的错误。