2016-09-07 79 views
0

我的代碼:PDO更新功能

public static function duzenle($tablo, $degerler, $kosul) { 
    global $db; 
    $prep = array(); 
    $aaa = array(); 
    foreach($degerler as $k => $v) { 
     $prep[$k.' = :'.$k] = $v; 
     $aaa[":".$k ."= '".$v."'"] = $k; 
    } 
    $sth = $db->prepare("UPDATE ".$tablo." SET " . implode(', ',array_keys($prep)) . " WHERE ".$kosul.""); 
    $res = $sth->execute("".implode(', ',array_keys($aaa)).""); 
    return implode(', ',array_keys($aaa)); 
} 

問題:

警告:PDOStatement對象::執行()預計參數1是陣列,在

+1

請注意,[您的代碼容易受到SQL注入攻擊](https://phpdelusions.net/pdo/sql_injection_example) –

+0

如果您嘗試以逗號分隔的方式綁定變量列表,則必須將每個單獨變量。如果您提供了準備好的查詢的示例輸出,它會對我們有所幫助。 – Shadow

+0

在執行之前,$ aaa的內容是什麼?如果我正確讀取你的代碼,只需將$ aaa傳遞給執行調用,因爲它需要一個數組。 – Dave

回答

0

I中給出 串解決問題

public static function duzenle($tablo, $degerler, $kosul) { 
    global $db; 
    $prep = array(); 
    $aaa = array(); 
    foreach($degerler as $k => $v) { 
     $prep[$k.' = :'.$k] = $v; 
    } 

    $sth = $db->prepare("UPDATE ".$tablo." SET ". implode(', ',array_keys($prep)) ." WHERE ".$kosul.""); 
    $res = $sth->execute($degerler); 
} 
+1

好的,你解決了這個愚蠢的錯字,但留下了SQL注入的地方。 –