2012-03-05 236 views
1

嗨即時通過使用PDO來更新MySQL數據庫的某些字段。我寫了一個名爲「bakeIT」的類,它連接到數據庫並根據方法simple_update()的參數更新一些字段。數據庫更新不起作用

不知何故第一實例調用BakeIT()->simple_update()是工作,但不是第二個?這是爲什麼?我得到的是真的瘋了......

編輯: 我發現了一些錯誤:

string(85) "SQLSTATE[28000] [1045] Access denied for user 'ODBC'@'localhost' (using password: NO)" Fatal error: Call to a member function prepare() on a non-object in BakeIT.php

表如下所示:enter image description here

class BakeIT { 

    function simple_update(
    $tablename, 
    $fieldname, 
    $value, 
    $id, 
    $idname, 
    $token, 
    $tokenvalue){ 

     $conn=$this->connect_db(); 
     $sql= "UPDATE $tablename SET $fieldname=? WHERE $idname=? AND $token=?"; 
     $q = $conn->prepare($sql); 
     $q->execute(array($value,$id,$tokenvalue)); 
     $conn = null;} 
} 


//This as the first query works!   
$saveanchor = new BakeIT(); 
$saveanchor->simple_update('navigation','anchor','whoo',5,'idnavigation','hash','3234'); 

//This as the second query not!  
$savetitle = new BakeIT(); 
$savetitle->simple_update('navigation','linkname','kawoom',5,'idnavigation','hash','3234'); 
+0

你不覺得你的SQL語句很危險嗎?你使盲目的數據更復雜化,但我認爲這是可能的。 Btt字段鏈接名稱是否存在? – rekire 2012-03-05 15:37:26

+0

不工作..你是指一些確切的錯誤,或者它默默無聞? – rkosegi 2012-03-05 15:38:17

+0

@rekire,rkosegi謝謝你的幫助。鏈接名稱確實存在...如果我用$ savetitle替換$ saveanchor一切都正常......失敗意味着它默默無聞...... – Jurudocs 2012-03-05 15:45:28

回答

1

領域linkname沒有按不存在。

要我對安全評論:到目前爲止,我知道prepred statemend防止攻擊者注入任何錯誤值進入該領域的內容。

function example($value, $primarykey, $condition) { 
    $q = $conn->prepare("UPDATE table SET somefield=? WHERE $primarykey=?"); 
    $q->execute(array($value,$condition)); 
} 

這是不可能操縱參數$value$condition但你可以設置$tableid1=1 --這將覆蓋你compleate表。

E.g. example(12, 34, "1=1 --");這將執行此處:

UPDATE table SET somefield=12 WHERE 1=1 --=34 
+0

再次感謝您的幫助... im確保沒有probs與表列...請參閱上述編輯有關錯誤... – Jurudocs 2012-03-05 16:21:54

+0

@Jurudocs我認爲數據庫連接在第一次更新後關閉。看起來'$ this-> connect_db()'在第二次調用'null'時返回。 – rekire 2012-03-05 16:26:23

+0

謝謝......我只是掏空了......但是到目前爲止沒有任何變化...... – Jurudocs 2012-03-05 16:31:34

1

好吧,我明白了!這是外部數據庫訪問數據的require_once。只有在「需要」的data.php(腳本DB訪問變量)一切工作正常...

感謝您的幫助,但!