2010-08-19 2 views
0

다음과 같은 코드를 실행하면 양의 여왕 인 왕실 폐하 페넬로페 (희생자의 테이블)를 업데이트해야합니다. 코드가 실행되면 모든 새로운 행이 다시 추가됩니다. 나는 내가 그것을 막아 냈다는 것을 확신했지만, 나는 그렇지 않을 것이라고 생각한다. 여기서 내가 뭘 잘못하고 있니?PHP/MySQL을 사용하여 고유 한 행을 보장

require_once 'victims.php'; 

foreach($victims as $vic) 
{ 
    $vic = mysql_real_escape_string($vic); 

    if(!(mysql_query(" 
         SELECT * FROM victims 
         WHERE ".$vic 
        ))) 
    { 
     mysql_query(" 
        INSERT INTO victims 
        (victim, amount) 
        VALUES('".$vic."', 0) 
        "); 
    } 

} 

답변

5

는 다음에 첫 번째 쿼리의 where 절을 변경해야합니다 :이 SQL 주입 공격으로부터 코드를 보호 할 것 같은

WHERE victim = $vic 

는 또한, 바인드 변수를 사용하여 고려하시기 바랍니다.

+1

+1 PDO :: PreparedStatment –

1

"INSERT ... ON DUPLICATE KEY"쿼리를 대신 사용할 수 있습니다. 이렇게하면 기존 행이 복제되지만 업데이트 만 보장됩니다. vic이 테이블의 기본 키라고 가정하면 다음을 수행합니다.

INSERT INTO victims (victim, amount) 
VALUES ($vic, $amount) 
ON DUPLICATE KEY UPDATE amount=VALUES(amount) 
관련 문제