2010-08-19 4 views
0

J'ai le code suivant qui devrait, lorsqu'il est exécuté, mettre à jour une table de "victimes" de Sa Majesté Royale Penelope la Reine des Moutons (c'est du travail pour quelqu'un, honnête), cependant chaque fois le code est exécuté, il ajoute à nouveau toutes les nouvelles lignes. J'étais sûr que j'avais protégé contre cela, mais je suppose que non. Qu'est-ce que je fais mal ici?Assurer des lignes uniques en utilisant 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) 
        "); 
    } 

} 

Répondre

5

Vous devez modifier la clause where de votre première requête à ce qui suit:

WHERE victim = $vic 

En outre, s'il vous plaît envisager d'utiliser des variables liées car cela protégera votre code des attaques par injection SQL.

+1

+1 PDO :: PreparedStatment –

1

Vous pouvez utiliser une requête "INSERT ... ON DUPLICATE KEY" à la place, ce qui garantira que les lignes existantes ne seront pas dupliquées, mais uniquement mises à jour. En supposant vic est la clé primaire de la table, vous feriez:

INSERT INTO victims (victim, amount) 
VALUES ($vic, $amount) 
ON DUPLICATE KEY UPDATE amount=VALUES(amount) 
Questions connexes