mysql_real_escape_string () fait juste une chaîne vide?
Je suis à l'aide de jQuery AJAX requête à une page appelée like.php
qui se connecte à ma base de données et insère une ligne. C'est le like.php
code:
<?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);
?>
De la ligne problématique est $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));
. Il semble tout simplement renvoyer une chaîne vide, et dans ma base de données sous la like_message
colonne de tout ce que je vois est d'entrées vides. Si je supprime mysql_real_escape_string()
cependant, il fonctionne très bien.
Voici mon code jQuery si ça aide.
$('#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('');
}
}
});
Tout cela jQuery code fonctionne très bien, je l'ai testé moi-même de façon indépendante.
Toute aide est grandement appréciée, merci.
source d'informationauteur VIVA LA NWO | 2010-06-09
Vous devez vous connecter pour publier un commentaire.
Êtes-vous à 1000% sûr que
$_POST["likeMsg"]
contient en fait quelque chose?Comme pour
mysql_real_escape_string()
de retourner une valeur vide, le manuel dit qu'il y a une seule situation où ce qui peut arriver:cela ne semble pas être le cas ici, que vous avez une connexion ouverte. Étrange.
Que les autres réponses ne font pas clair exactement quoi faire, voici mon:
Lorsque vous ne
vous devez vous échapper comme ceci:
REMARQUE: Parce que les gens sont downvoting ce (WTF!?), voici la page officielle de l'officiel manuel php qui dit EXACTEMENT ce que j'ai posté le: real_escape_string @ Manuel PHP.
Pour les personnes qui pourraient être de trouver ce nouveau maintenant, je viens de tomber sur ce problème car je suis à la migration à partir de PHP5 pour PHP7. Je vais changer de
string mysql_real_escape_string(string $unescaped, [resource $link = NULL])
:
string mysqli_real_escape_string(mysqli $link, string $escapestr)
Donc, en d'autres termes, la base de données $lien n'est plus facultatif et se déplace vers le premier argument de la position. Si on les laisse sortir, elle renvoie une chaîne vide, sans une erreur, apparemment.
Faire un var_dump de $_POST['likeMsg'], et un var_dump de $likeMsg. Qui vous donne des informations sur ce qui va mal.
mysql_real_escape_string() retournera en blanc de la réponse si vous n'avez pas de connexion à la base de données ...