/ / Auf erste Anfrage einfügen; Aktualisieren Sie alle nachfolgenden Anforderungen - mysql, insert

Bei erster Anfrage einfügen; Update auf alle folgenden Anfragen - mysql, einfügen

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 № 1

Sie 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