PHP mysqli: экранирование строк, странное сохранение - PullRequest
0 голосов
/ 04 января 2012

Я пишу редактор кода, используя CodeMirror.Я собираюсь сохранить Javascripts в базе данных MySQL.Поскольку Javascript довольно часто использует символ ', мне пришлось использовать mysqli->real_escape_string() для ввода textarea.

Когда я получаю источник из таблицы сценариев, он все еще содержит экранированные символы.

Итак, если бы я вставил это:

this.update('something');

Вы бы получили

this.update(\'something\');

Есть ли какой-нибудь способ полностью изменить процесс?

Ответы [ 2 ]

1 голос
/ 05 января 2012

Используете ли вы подготовленные MySQL заявления?
Если это так, вы не должны использовать mysqli->real_escape_string() тогда
Если нет - то у вас есть magic_quotes_gpc и вы должны выключить его

0 голосов
/ 04 января 2012

Вы всегда можете попробовать использовать stripslashes () .

Странно, однако, что ваша real_escape_string не работает должным образом. Не следует оставлять косые черты. Может случиться так, что на вашем хосте включена функция magic_quotes_runtime. Вы можете отключить его с помощью set_magic_quotes_runtime(0).

Может быть, вы дважды избегаете его, используя mysql_real_escape_string и addslashes?

Тем не менее, рекомендуется изменить код для использования переменных связывания, а не экранирования строки.

Пример:

$query = $mysqli->prepare( "UPDATE tablename SET favorite_color = ?, age = ?, description = ? WHERE user = ?" );

// we would have a bind looking like this:
$query->bind_param( 'sibs', 'red', 27, $some_blob, $variable );
$query->execute();

Достойное объяснение этого (и SQL-инъекции) можно найти здесь .

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