2016-09-07 2 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

Ok 바보 같은 오타를 수정했지만 SQL 주입을 제자리에 두었습니다. –