在我看來,我有一個奇怪的問題。下面的部分工作正常作爲方法使用時,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