2010-08-19 3 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 victim = $vic 

Кроме того, пожалуйста, рассмотрите возможность использования переменных связывания, как это защитит ваш код от атак внедрения SQL.

+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) 
Смежные вопросы