在我看来,我有一个奇怪的问题。下面的部分工作正常作为方法使用时,php查询执行错误
$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
坏人会杀死你的数据库....你的代码易受攻击 –
第一个代码片段中有$ db变量;第二个不是。你没有显示它被初始化的地方,但它实际上是这里的关键。 – raina77ow
它只适用于后端使用,可能是两个用户,我假设他们不想销毁他们自己的数据库。但它应该是安全的,我做错了什么? – Maurice