PHP / MySQL возникли проблемы с ОБНОВЛЕНИЕМ двойного значения

#php #mysql

#php #mysql

Вопрос:

Итак, я использую PHP / MySQL, и у меня есть таблица tbl_profile со следующими полями:

loginid, venueTitle, description, address, long, широта.

Вам придется поверить мне, когда я скажу, что я протестировал и у меня не было проблем с обновлением и извлечением данных из всех полей, кроме long и lat. Поля long и lat имеют тип double, и через графический интерфейс, предоставляемый phpmyadmin, я смог вставить значения, а затем получить эту информацию, но по какой-то причине, когда я пытаюсь запросить с помощью UPDATE, я, похоже, не могу заставить его что-либо делать. Вот два запроса, первый работает, а второй не приводит к обновлению. Я распечатал $ longitude и $ latitude просто для того, чтобы дважды проверить правильность значений и правильность их печати. Я даже преобразовал их в doubleval, чтобы попытаться убедиться, что они того же типа, что и тип поля в таблице. Есть идеи? Я предполагаю, что долгота и широта не распознаются как тот же тип, что и в таблице, но я не знаю, почему это могло бы быть.

 $sql = "UPDATE tbl_profile SET venueTitle='$v', description='$d', address='$a' WHERE   
loginid='$username'"; // this query works

$longitude = doubleval($north);
$latitude = doubleval($east);
$sql = "UPDATE tbl_profile SET venueTitle='$v', description='$d', address='$a', long 
='$longitude', lat='$latitude' WHERE loginid='$username'"; // doesn't work
  

Комментарии:

1. Обозначения чисел с плавающей запятой, которые doubleval выводит php, не соответствуют ожиданиям MySQL относительно допустимого числа с плавающей запятой.

Ответ №1:

long является зарезервированным словом в MySQL. Использование mysql_error() указало бы вам на проблему в long='<longtitude value>' .

Либо измените имена столбцов, либо оберните их обратными метками в своих запросах, например

 UPDATE tbl_profile SET `long` = something ...
  

Кроме того, ваш код кажется открытым для SQL-инъекции. Я бы серьезно подумал о переходе на PDO и использовании подготовленных инструкций с привязанными параметрами.

Комментарии:

1. Я бы поставил вам 1, но у меня все еще нет представителя для этого. Кроме того, не уверен, что такое SQL-инъекция, но я прочитаю об этом. Спасибо.

2. @dwin Решает ли это вашу проблему? Вы должны быть в состоянии принять ответ (может быть задержка)

3. Эй, извините. Да, вы были правы, это из-за зарезервированного слова long. Я переименовал его в lng, и он отлично работает.