2016-09-07 21 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インジェクションをそのまま残しました。 –