2012-03-30 11 views
1

ich Probleme mit diesem Code habe:PHP Datensatz einfügen in MySQL-DB (Multiple aufgezeichnet hinzugefügt werden)

<?php 
$new_value = 'testing'; 

$con = mysql_connect("localhost","user","pass"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("my_db", $con); 

mysql_query("INSERT INTO myDB (myField) VALUES ('$new_value')"); 

mysql_close($con); 

?> 

2 Fragen sind passiert:

1. - 2 Datensätze statt eingefügt werden 1

2. - $ new_value nicht geändert wird und es mehrere Instanzen mit dem gleichen $ new_value Wert zu schaffen, wenn ich will nur 1.

+0

Wo in Ihrem Code soll sich $ new_value ändern? Oder meinen Sie, dass Sie den gleichen Wert immer wieder in die DB einfügen? Das ist korrekt, weil ich nicht sehe, dass Sie etwas über eindeutige Werte oder nichts angeben. – Bono

+0

Korrekt Ich habe den gleichen Wert immer wieder in die DB eingefügt und möchte nur einen – Satch3000

+1

Sind Sie sicher, dass Sie dieses Codesegment nicht zweimal ausführen (z. B. "include/require")? Es scheint unmöglich zu sein, dass zwei Datensätze anstelle eines einzelnen Datensatzes eingefügt werden. –

Antwort

3

ich denke, das etwas ähnlich ist wh an Dich nach, nach dem Kommentar zu lesen:

INSERT IGNORE INTO tablename (fields) 
VALUES(values); 

Verwendung INSERT IGNORE statt INSERT. Wenn ein Datensatz keinen vorhandenen Datensatz dupliziert, fügt MySQL ihn wie üblich ein. Wenn der Datensatz ein Duplikat ist, weist das Schlüsselwort IGNORE MySQL an, es still zu verwerfen, ohne einen Fehler zu erzeugen.

bearbeiten Oder wie Vytautas weist darauf hin; wenn Sie wollen ersetzen der Wert Verwendung REPLACE anstelle von INSERT

+0

INSERT IGNORE fügt es immer noch zweimal hinzu – Satch3000

0

2. - $ new_value nicht verändert wird und es mehrere Instanzen mit dem gleichen $ new_value Wert zu schaffen, wenn ich will nur 1.

Wo wird $ new_value geändert? Wie ist es geändert? Sind Sie sicher, dass Sie die Aktualisierungsschaltfläche des Browsers nicht oft drücken?

+0

Es wird nur 1 Instanz von $ new_value geben, also $ new_value = 'Value1'; ... Der Code fügt sich selbst zweimal in die db-Tabelle ein, ich möchte Duplikate vermeiden – Satch3000

1

Warum versuchen Sie nicht, Transaktionen zu verwenden? Es hilft Ihnen, einige insert/update Fehler zu vermeiden:

try 
    { 

     // Start TRANSACTION 
     mysqli_autocommit($con, false); 

     mysqli_query('INSERT INTO table SET field = "'.$fieldValue.'"'); 

     // If there is no error then COMMIT 
     mysqli_commit($con);  

    } 
    catch(Exception $e) 
    { 

     // If there is an error, then rollback any INSERTS or UPDATES in the TRY block 
     mysqli_rollback($con); 

     $theError = $e->getMessage(); 
    } 

Seine dringend empfohlen, Try/Catch-Blöcke in Ihrem Code verwenden, wenn die Arbeit mit Datenbanken.

Verwandte Themen