Ich füge eine Zeile in eine MySQL-Datenbanktabelle ein. Beim ersten Einfügen möchte ich eine neue Zeile hinzufügen, aber danach möchte ich nur, dass diese Zeile aktualisiert wird. So mache ich es. Eine Ajax-Anfrage ruft die folgende PHP-Datei auf:
<?php
include "base.php";
$bookID = $_POST["bookID"];
$shelfID = $_POST["shelfID"];
$userID = $_SESSION["user_id"];
$query = mysql_query("SELECT shelfID FROM shelves WHERE userID = "$userID" AND shelfID = "$shelfID" AND bookID = "$bookID"");
if (mysql_num_rows($query) == 0) {
$insert = "INSERT INTO shelves (bookID,shelfID,userID) VALUES ("$bookID","$shelfID","$userID")";
mysql_query($insert) or die(mysql_error());
} elseif (mysql_num_rows($query) == 1) { //ie row already exists
$update = "UPDATE shelves SET shelfID = "$shelfID" WHERE userID = "$userID" AND bookID = "$bookID"";
mysql_query($update) or die(mysql_error());
}
?>
So wie es ist, fügt es jedes Mal eine neue Reihe hinzu.
Antworten:
0 für die Antwort № 1Sie sollten erwägen, PDO für den Datenzugriff zu verwenden. Es gibt eine Diskussion darüber, was Sie hier tun müssen: PDO-Einfügung bei Duplicate Key Update
Ich würde das als Duplikat kennzeichnen, aber diese Frage befasst sich speziell mit der PDO.
0 für die Antwort № 2
Sie können die Syntax INSERT ... ON DUPLICATE KEY UPDATE verwenden. Solange Sie einen eindeutigen Index für den Datensatz haben (d. H. Userid + shelfid + bookid), den Sie einfügen, wird stattdessen ein Update durchgeführt.
http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html