Как сохранить PHP HTTP_USER_AGENT в поле MySQL - PullRequest
5 голосов
/ 05 июля 2010

У меня есть простой PHP-скрипт формы обратной связи, который я хотел бы улучшить, добавив данные $ _SERVER [HTTP_USER_AGENT] в строку в базе данных, которую я сохраняю.

Я получаю ошибки синтаксического анализа, когдаЯ пробую простую вставку, передавая '$ _SERVER [HTTP_USER_AGENT]' как типичную строку.Стоит ли каким-то образом связывать его, чтобы символы, используемые в этой переменной сервера, не вызывали таких ошибок?

(Кстати, запрос INSERT работает без этого поля, кстати.)

Спасибо.

Ответы [ 3 ]

7 голосов
/ 05 июля 2010

Я уверен, что в строках пользовательского агента есть ', которые вызывают ошибку синтаксического анализатора.

Строка User-Agent, возвращаемая в PHP, находится под контролем локального браузера, что означает, что вам нужно обращаться с ней не иначе, как с обычным пользовательским вводом. Злонамеренный пользователь или пользователь, зараженный вирусом / трояном / червем, может изменить строку агента пользователя, чтобы вызвать атаку SQL-инъекцией. По крайней мере, вам нужно избежать этого (например, с помощью mysql_real_escape_string () . Моя ставка в том, что как только вы это сделаете, ваши ошибки синтаксического анализатора также должны исчезнуть. Еще лучше, попробуйте перейти к использованию *). 1006 * подготовленные заявления , если ваша система позволяет это.

1 голос
/ 05 июля 2010

Не работает ли

mysql_query("
INSERT INTO
    db_table
VALUES (
    ...
    '" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']) . "'
    ...
)");

?Можете ли вы показать нам весь свой запрос?Каковы точные сообщения об ошибках?

0 голосов
/ 05 июля 2010

Без реального сообщения об ошибке трудно сказать, с какой конкретной проблемой вы столкнулись.
Но чтобы решить все возможные проблемы,

  • Прежде всего, вы должны прочитать официальную страницу руководства, чтобы понять синтаксис строк PHP: http://php.net/types.string

  • Тогда вы должны понимать правильный синтаксис Mysql. Я уже объяснил это здесь

  • Наконец, вы должны собрать все воедино

вот так:

$agent = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
$sql   = "INSERT INTO `table` set useragent = '$agent'";
$res   = mysql_query($sql) or trigger_error(mysql_query.$sql);

Выполнение запросов таким образом, у вас никогда не возникнет проблем. Или полное сообщение об ошибке по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...