Хорошо, поскольку вы не можете просто переключить API баз данных в более крупный проект, я более внимательно рассмотрел вашу проблему. Тем не менее, вы должны перейти на mysqli
или PDO
asap.
Ошибка, которую вы сделали, заключалась в том, чтобы использовать mysql_real_escape_string()
в неправильном положении. Вы должны использовать его непосредственно перед отправкой своих данных в базу данных, поэтому ее необходимо использовать внутри вашей функции update_query()
.
Давайте проверим разницу между правильным и неправильным использованием.
Как обрабатывать данные
Определение пароль.
$password = <<<'PASSWORD'
@:;_-#()\/+.,?!\'"
PASSWORD;
var_dump($password);
// string(18) "@:;_-#()\/+.,?!\'""
Следующий шаг: кодировка json
! Вместо этого вы избежали вашей строки в этом месте.
$passwordJSON = json_encode($password);
var_dump($passwordJSON);
// string(24) ""@:;_-#()\\\/+.,?!\\'\"""
// compared to:
$passwordEscaped = mysql_real_escape_string($password);
var_dump($passwordEscaped);
// string(22) "@:;_-#()\\/+.,?!\\\'\""
Затем приходит время, чтобы избежать его для базы данных. Но здесь вы использовали json_encode()
, слишком поздно.
$passwordJSONEscaped = mysql_real_escape_string($passwordJSON);
var_dump($passwordJSONEscaped);
//string(34) "\"@:;_-#()\\\\\\/+.,?!\\\\\'\\\"\""
// compared to
$passwordEscapedJSON = json_encode($passwordEscaped);
var_dump($passwordEscapedJSON);
// string(32) ""@:;_-#()\\\\\/+.,?!\\\\\\'\\\"""
Результат
$resultCorrectWay = mysql_query("INSERT INTO passwordtest (password) VALUES ('$passwordJSONEscaped')");
var_dump($resultCorrectWay);
// bool(true)
// vs
$resultWrongWay = mysql_query("INSERT INTO passwordtest (password) VALUES ('$passwordEscapedJSON')");
var_dump($resultWrongWay);
// bool(false)
Заключение
С помощью json_encode()
ПОСЛЕ вы уже убежали вашу строку, вы добавили новые объекты, которые должны были бы быть экранированы для вашего запроса на работу ,
Сделайте это в правильном порядке, затем база данных может обрабатывать ваше заявление.
Все дело за попытку его дома
<?php
ini_set('display_errors', 1);
error_reporting(-1);
mysql_connect('localhost', 'user', 'password');
mysql_select_db('test');
echo '<pre>';
$password = <<<'PASSWORD'
@:;_-#()\/+.,?!\'"
PASSWORD;
var_dump($password);
// string(18) "@:;_-#()\/+.,?!\'""
$passwordJSON = json_encode($password);
var_dump($passwordJSON);
// string(24) ""@:;_-#()\\\/+.,?!\\'\"""
$passwordJSONEscaped = mysql_real_escape_string($passwordJSON);
var_dump($passwordJSONEscaped);
//string(34) "\"@:;_-#()\\\\\\/+.,?!\\\\\'\\\"\""
$resultCorrectWay = mysql_query("INSERT INTO passwordtest (password) VALUES ('$passwordJSONEscaped')");
var_dump($resultCorrectWay);
// bool(true)
$passwordEscaped = mysql_real_escape_string($password);
var_dump($passwordEscaped);
// string(22) "@:;_-#()\\/+.,?!\\\'\""
$passwordEscapedJSON = json_encode($passwordEscaped);
var_dump($passwordEscapedJSON);
// string(32) ""@:;_-#()\\\\\/+.,?!\\\\\\'\\\"""
$resultWrongWay = mysql_query("INSERT INTO passwordtest (password) VALUES ('$passwordEscapedJSON')");
var_dump($resultWrongWay);
// bool(false)
редактировать: когда не JSON кодирования
var_dump($password);
// string(18) "@:;_-#()\/+.,?!\'""
mysql_query("INSERT INTO passwordtest (password) VALUES ('" . mysql_real_escape_string($password) . "')");
Значение в базе:
@:;_-#()\/+.,?!\'"
использование 'mysql_real_escape_string 'также возможно дублировать. http://stackoverflow.com/questions/2584066/how-to-insert-special-characters-into-a-database – Karthi
@LifeTimeProgrammer благодарит за ответ, но его не дублирует Как я уже сказал, я уже пробовал и его не работает –
Позвольте мне добавить свой вопрос, чтобы показать мой запрос с mysql_real_escape_string –