#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, и он отлично работает.