2015-04-27 3 views
-4

Как я могу сначала вставить долготу и широту, а затем обновить ее при наличии? Я попробовал его с утверждением запроса в коде, но я получаю эту ошибку Parse error: syntax error, unexpected 'Table' (T_STRING) in C:\xampp\htdocs\bustracker\index.php on line 28 но если запрос вставки удаляемого я получаю выход Table existСначала вставьте, а затем обновите долготу и широту в таблице

<?php 
$json = '{"latitude":93.86898451,"longitude":40.66561387,"time":"27.04.2015 20:11:05","route":4}'; 
$data = json_decode ($json); 
$route = "route_" . $data->{'route'}; 
$latitude = $data->{'latitude'}; 
$longitude = $data->{'longitude'}; 
$recordingTime = $data->{'time'}; 

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) { 
    //The error is in this query. 
    $con->query ("INSERT INTO ".$route."(latitude, longitude) 
     VALUES(".$latitude.", ".$longitude.") 
     ON DUPLICATE KEY UPDATE 
     latitude = ".$latitude.", 
     longitude = ".$longitude) or die ($con->error); 

echo "Table exist"; 
} else { 
    $con->query ("CREATE TABLE " . $route . " 
     (id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    latitude FLOAT(10,6) NOT NULL, 
    longitude FLOAT(10,6) NOT NULL, 
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)") or die ($con->error); 

    echo "table was craeted"; 
} 

?> 
+1

У вас есть синтаксическая ошибка 'longitude = '. $ Longitude.") или die ($ con> error); 'удалить'. '' после '$ longitude' – Augwa

+0

Hi @tree. Ошибки синтаксиса PHP можно легко обнаружить в среде IDE - попробуйте что-то вроде Eclipse, NetBeans или PHP Storm. – halfer

+0

Я удалил его, но в этой строке есть еще одна ошибка 'longitude =". $ Longitude. ") Или die ($ con> error)' – tree

ответ

1

Вот пример того, как использовать подготовленное заявление с связывают заполнители. Для отладки динамически сгенерированного SQL часто помогает присвоить сгенерированный текст SQL переменной, а затем она доступна для отображения для отладки.

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

    #var_dump($sql); # for debugging 
    $stmt = $con->prepare($sql) or die ($con->error); 
    $stmt->bind_param("ss",$latitude,$longitude); 
    $stmt->execute(); 

    $stmt->close(); 

В этом примере, мы должны быть уверены, что $route является допустимым идентификатором; здесь есть потенциал для SQL-инъекции через значение $route. (Мы не можем предоставить привязку для идентификатора.)

Не совсем ясно, как вставка собирается выбросить исключение «дублирующего ключа»; мы не видим, какие группы столбцов определяются как PRIMARY KEY или UNIQUE KEYs.

Мы можем ссылаться на значения из списка VALUES INSERT в выражениях ON UPDATE, используя специальную функцию VALUES(), как показано выше. Нам не нужно предоставлять несколько экземпляров значения «широты» в инструкции.

+0

Он отлично работает. Только один вопрос, могу ли я сделать свой столбец 'широты' как UNIQUE KEY в моем случае? – tree

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