Mysql_real_escape_string() просто создает пустую строку?
Я использую запрос jQuery AJAX на страницу под названием like.php
, которая подключается к моей базе данных и вставляет строку. Это код like.php
:
<?php
// Some config stuff
define(DB_HOST, 'localhost');
define(DB_USER, 'root');
define(DB_PASS, '');
define(DB_NAME, 'quicklike');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('ERROR: ' . mysql_error());
$sel = mysql_select_db(DB_NAME, $link) or die('ERROR: ' . mysql_error());
$likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));
$timeStamp = time();
if(empty($likeMsg))
die('ERROR: Message is empty');
$sql = "INSERT INTO `likes` (like_message, timestamp)
VALUES ('$likeMsg', $timeStamp)";
$result = mysql_query($sql, $link) or die('ERROR: ' . mysql_error());
echo mysql_insert_id();
mysql_close($link);
?>
Проблематичная строка $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));
. Кажется, что просто возвращает пустую строку, а в моей базе данных в столбце like_message
все, что я вижу, это пустые записи. Если я удалю mysql_real_escape_string()
, но он отлично работает.
Вот мой код jQuery, если он помогает.
$('#like').bind('keydown', function(e) {
if(e.keyCode == 13) {
var likeMessage = $('#changer p').html();
if(likeMessage) {
$.ajax({
cache: false,
url: 'like.php',
type: 'POST',
data: { likeMsg: likeMessage },
success: function(data) {
$('#like').unbind();
writeLikeButton(data);
}
});
} else {
$('#button_container').html('');
}
}
});
Весь этот код jQuery работает отлично, я сам его самостоятельно тестировал.
Любая помощь очень ценится, спасибо.
Ответы
Ответ 1
Вы на 1000% уверены, что $_POST["likeMsg"]
действительно что-то содержит?
Что касается mysql_real_escape_string()
, возвращающего пустое значение, руководство говорит, что существует только одна ситуация, когда это может произойти:
Примечание. Перед использованием mysql_real_escape_string() требуется соединение MySQL, иначе возникает ошибка уровня E_WARNING и возвращается FALSE. Если link_identifier не определен, используется последнее соединение MySQL.
похоже, это не так, поскольку у вас есть соединение открыто. Странно.
Ответ 2
Поскольку в других ответах не указывается, что именно делать, здесь my:
Когда вы делаете
$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE);
вам нужно сбежать следующим образом:
$newEscapedString = $db_connection->real_escape_string($unescapedString);
ПРИМЕЧАНИЕ. Потому что люди занижают это (WTF!?), здесь официальная страница официального руководства php, в котором говорится ТОЧНО, что я опубликовал: real_escape_string @Руководство PHP.
Ответ 3
Сделайте var_dump $_POST ['likeMsg'] и var_dump $likeMsg. Это дает вам информацию о том, что пошло не так.
Ответ 4
Для людей, которые могут найти это снова сейчас, я просто столкнулся с этой проблемой, поскольку я перехожу от PHP5 к PHP7. Я изменяю с
string mysql_real_escape_string(string $unescaped, [resource $link = NULL])
в
string mysqli_real_escape_string(mysqli $link, string $escapestr)
Итак, другими словами, ссылка $link больше не является необязательной и перемещается в первую позицию аргумента. Если он отсутствует, он возвращает пустую строку без ошибки.
Ответ 5
mysql_real_escape_string() возвращает пустой ответ, если вы не подключились к базе данных...