2016-09-19 2 views
0

Wenn ich diesen Code eingefügt mit es zwei Daten einfügen und i Downt wissen, wie esWenn ich Daten in MySQL Einfügen einfügen es zwei Daten, und ich weiß nicht, warum

$sql = "SELECT Version_id FROM versions ORDER BY Version_id DESC LIMIT 1;"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     $lastVersion =$row["Version_id"]; 
    } 
} 
echo($lastVersion); 
$lastVersion++; 
$sql = "INSERT INTO versions (version) 
VALUES ('v$lastVersion')"; 
if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
+0

Sie meinen 2 Reihen? Außerdem würde ich denken, dass Sie den Wert von Version_id auch zu Ihrer neu hinzugefügten Zeile hinzufügen müssten. – jeroen

+0

ist es v $ lastVersion oder $ lastVersion –

+0

spezifizieren Sie ein wenig mehr, mit was Sie arbeiten. Ihre SELECT- und INSERT-Befehle stimmen nicht überein. – RST

Antwort

1

zu beheben Während ich nicht genau Verstehen Sie, was Sie mit "zwei Daten" meinen, ich sehe mehrere Probleme mit Ihrem Code.

Zunächst einmal ist es schrecklich ineffizient und anfällig für race conditions. Es ist auch ziemlich falsch, weil es nicht das tut, was Sie wollen. Nicht zu vergessen, sollte durch native Datenbankfunktionalität ersetzt werden.

Die meisten dieser Fehler können behoben werden, indem einfach das Feld version_id in AUTO_INCREMENT geändert wird. Dadurch erhält der neue Datensatz automatisch die nächste verfügbare ID im Set, genau wie das, was Sie tun möchten. Dann können Sie diese ID abrufen, indem Sie „lastInsertId()

Die gesamte Code machen würde in Ihrem Beitrag superflous und benötigen nur Sie so etwas wie dies tun, wenn tatsächlich Daten eingefügt:

$sql = "INSERT INTO `version`(`setting`, `date`) VALUES (:setting, :date)"; 
$stmt = $db->prepare ($sql); 
$res = $stmt->execute ($data); 
$newID = $db->lastInsertId(); 

Nach Die neue Versionskennung wird in der Variablen $newID gespeichert.

Natürlich, wenn Sie die Versions-ID aus irgendeinem Grund UPDATE möchten, dann INSERT ist der falsche Befehl zu verwenden. Warum auch eine ganze Tabelle für eine einfache Versionsnummer verwenden? Kurz gesagt, dein ganzer Tisch macht für mich keinen Sinn.
Ich empfehle, die Gründe dafür zu erklären, damit wir möglicherweise bessere Lösungen finden können.