2015-04-27 4 views
1

Я внедрил этот код для вставки и обновления данных в моей базе данных, но когда я пытаюсь, данные новой строки всегда вставляются в таблицу, и она не обновляется. Как я могу определить уникальный ключ в моем случае, чтобы заставить его работать? У меня есть первичный ключ.Определить ограничение UNIQUE для таблицы

<?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)"; 

Какая переменная Я должен добавить в ЦЕННОСТЕЙ фигурные скобки для ид?

+0

Как предполагается узнать, какую строку обновить? Должна ли ваша таблица иметь столбец «route»? – Barmar

+0

BTW: Вам не нужно указывать 'UNIQUE' для первичного ключа, он всегда уникален. И вам не нужно вставлять столбец 'created_at', поскольку он по умолчанию относится к текущему времени. – Barmar

+0

@ Бармар: Я не понимаю, что вы хотите? Мне нужно добавить столбец маршрута в мой стол, чтобы заставить его работать? – tree

ответ

3

Вы не указываете значение для id в инструкции INSERT INTO, поэтому никогда не будет дублирующего ключа.

Вместо этого он автоматически генерирует следующий доступный идентификатор.

Чтобы решить эту проблему, укажите значение уже существующего идентификатора (если есть).

+0

, и какой vairiable следует добавить в фигурные скобки 'VALUES' для id? см. мой обновленный код. – tree

+0

Пожалуйста, не редактируйте свой вопрос, чтобы скрыть исходную проблему. Вместо этого добавьте в конец обновленную попытку. На первый взгляд, ваше редактирование выглядит так, как будто оно должно работать, если у вас есть 'id', который был сохранен из ранее выбранного его из базы данных. Недостаточно вашего кода в вопросе, чтобы узнать, происходит ли это, или где вы его сохраняете. –

+0

Я отредактировал ваш вопрос, чтобы восстановить исходную версию, и добавил ваши изменения до конца. –

Смежные вопросы