指定UNIQUE键以插入然后更新记录

时间:2015-04-28 08:43:35

标签: php

我正在尝试使用下面的代码更新我的记录,但每次都会在我的表格中插入新记录。如何指定UNIQUE键以达到我的目标?

这是我在php脚本中添加的整个代码加上connection.php文件,它只包含连接语句。在我的mysql中,我只有一个数据库,其中正在创建route_4表。我的数据库只包含route_4表。

PHP脚本:

<?php

$json = '{"latitude":83.16898451,"longitude":31.16561387,"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."(id, latitude, longitude, created_at)
          VALUES( id, ? , ? , 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 created";
}

1 个答案:

答案 0 :(得分:0)

在表格结构中进行以下更改

1)删除列Unique

的现有id

2)为unique和&#39;经度``添加latitude

ALTER TABLE `db_name`.`route_4` ADD UNIQUE ( `latitude` , `longitude` )

一旦你将纬度和经度都作为一组唯一键,那么你的sql查询将更新重复条目的记录,否则将插入。

希望这有帮助