我已經實現了這個代碼來插入和更新我的數據庫中的數據,但是當我嘗試它時,一個新行的數據總是被插入表中並且它沒有被更新我怎樣才能定義在我的情況下唯一的關鍵是讓它工作?我有主鍵ID。定義表的唯一鍵約束
<?php
$json = '{"latitude":53.86898451,"longitude":10.66561387,"route":4}';
$data = json_decode ($json);
$route = "route_" . $data->{'route'};
$latitude = $data->{'latitude'};
$longitude = $data->{'longitude'};
require 'connection.php';
// check whether route's table exist.
$results = $con->query ("SHOW TABLES LIKE'" . $route . "'") or die (mysqli_error());
if (($results->num_rows) == 1) {
//"UPDATE MyGuests SET lastname='Doe' WHERE id=2"
$sql = "INSERT INTO ".$route."(latitude, longitude, created_at)
VALUES(? , ? , NOW())
ON DUPLICATE KEY
UPDATE latitude = VALUES(latitude)
, longitude = VALUES(longitude)";
$stmt = $con->prepare($sql) or die ($con->error);
$stmt->bind_param("ss",$latitude,$longitude);
$stmt->execute();
$stmt->close();
echo "Table exist";
} else {
$create = "CREATE TABLE " . $route . "
(id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY UNIQUE,
latitude FLOAT(10,6) NOT NULL,
longitude FLOAT(10,6) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)" ;
$stmt = $con->prepare($create) or die ($con->error);
$stmt->execute();
$stmt->close();
echo "table was craeted";
}
UPDATE
這就是我現在
$sql = "INSERT INTO ".$route."(id, latitude, longitude, created_at)
VALUES(id, ? , ? , NOW())
ON DUPLICATE KEY
UPDATE latitude = VALUES(latitude)
, longitude = VALUES(longitude)";
我應該在值添加哪個變量括號爲ID努力?
它應該如何知道哪一行更新?你的桌子不應該有「路線」列嗎? – Barmar
順便說一句:你不需要爲主鍵說'UNIQUE',它總是唯一的。你不需要插入'created_at'列,因爲它默認爲當前時間。 – Barmar
@Barmar:我不明白你的意思嗎?我必須在表格中添加路線列才能使其工作? – tree