mysql_real_escape_string () просто делает пустую строку?
-
25-09-2019 - |
Вопрос
Я использую запрос 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 работает нормально, я сам проверил это самостоятельно.
Любая помощь значительно ценится, спасибо.
Решение
Вы уверены, что на 1000% $_POST["likeMsg"]
на самом деле содержит что-то?
Что касается mysql_real_escape_string()
возвращение пустого значения, руководство говорит, что есть только одна ситуация, когда это может случиться:
ПРИМЕЧАНИЕ. Перед использованием MySQL_REAL_ESCAPE_STRING () подключение MySQL требуется. Если Link_identifier не определен, используется последнее соединение MySQL.
Это, похоже, это не так, как у вас есть связь открыта. Странный.
Другие советы
Поскольку другие ответы не дают ясно, что именно делать, вот мой:
Когда вы делаете
$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE);
Вы должны сбежать так:
$newEscapedString = $db_connection->real_escape_string($unescapedString);
Примечание. Поскольку люди снижают это (WTF!?), Вот официальная страница официального руководства PHP, которая говорит именно то, что я опубликовал: Real_escape_String @ PHP руководство.
Для людей, которые могут найти это снова сейчас, я просто побежал в эту проблему, так как я мигрирующую из PHP5 до PHP7. Я меняюсь из-за
string mysql_real_escape_string(string $unescaped, [resource $link = NULL])
к:
string mysqli_real_escape_string(mysqli $link, string $escapestr)
Итак, другими словами, база данных $ link больше не является необязательной и перемещается к первому позиции аргумента. Если оставлено, он возвращает пустую строку без ошибки, по-видимому,.
Делайте var_dump of $ _POST ['lakemsg'], а var_dump of $ likemsg. Это дает вам информацию о том, что идет не так.
MySQL_REAL_ESCAPE_STRING () вернет пустой ответ, если вы не сделали подключения к базе данных ...