为表定义UNIQUE键约束

时间:2015-04-27 21:50:20

标签: php

我已经实现了这个代码来插入和更新我的数据库中的数据但是当我尝试它时,新行的数据总是被插入表中并且没有被更新我如何定义唯一键在我的情况下让它工作?我有主键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";
}

更新

这就是我现在正在尝试的

$sql = "INSERT INTO ".$route."(id, latitude, longitude, created_at)
      VALUES( id, ? , ? , NOW() )
      ON DUPLICATE KEY 
      UPDATE latitude = VALUES(latitude)
           , longitude = VALUES(longitude)";

我应该在VALUES大括号中为id添加哪个变量?

1 个答案:

答案 0 :(得分:3)

您没有在INSERT INTO语句中为id指定值,因此永远不会有重复的键。

相反,它会自动生成下一个可用ID。

要解决此问题,请指定预先存在的ID(如果有)的值。