2010-06-09 22 views
10

Estoy usando una solicitud jQuery AJAX a una página llamada like.php que se conecta a mi base de datos e inserta una fila. Este es el código like.php:mysql_real_escape_string() simplemente hace una cadena vacía?

<?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); 

?> 

La línea problemática es $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));. Parece que solo devuelve una cadena vacía, y en mi base de datos bajo la columna like_message, todo lo que veo son entradas en blanco. Si elimino mysql_real_escape_string(), funciona bien.

Aquí está mi código jQuery si ayuda.

$('#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(''); 
     } 
    } 
}); 

Todo este código jQuery funciona bien, lo he probado yo mismo de forma independiente.

Cualquier ayuda es muy apreciada, gracias.

+0

Antes de ejecutar SQL do 'var_dump ($ likeMsg); echo $ sql; muere; 'y mira lo que contienen esas variables. Después de eso, si está bien, pegue la salida de SQL en phpMyAdmin y verifique el resultado. – hsz

Respuesta

22

¿Estás seguro al 1000% de que $_POST["likeMsg"] realmente contiene algo?

En cuanto a mysql_real_escape_string() devolver un valor vacío, el manual dice que sólo hay una situación en la que puede suceder:

Nota: Se requiere una conexión MySQL antes de usar mysql_real_escape_string() sino un error de nivel E_WARNING es generado y se devuelve FALSO. Si link_identifier no está definido, se utiliza la última conexión MySQL.

esto no parece ser el caso aquí, ya que tiene una conexión abierta. Extraño.

+0

Lo leí cuando google'd el problema. He iniciado una conexión de base de datos antes de usar 'mysql_real_escape_string()' embargo. –

+0

@James, entonces debe ser esa información en sí misma. ¿Puedes mostrar un volcado de '$ _POST'? –

+0

@James alternativamente, ¿puede intentar especificar explícitamente la conexión como parámetro? –

1

Haz un var_dump de $ _POST ['likeMsg'], y un var_dump de $ likeMsg. Eso le da información sobre lo que va mal.

13

Como las otras respuestas no dejan claro qué es exactamente lo que hacer, aquí está mi:

Al hacer

$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE); 

tiene que escapar de esta manera:

$newEscapedString = $db_connection->real_escape_string($unescapedString); 

NOTA : Debido a que la gente está bajando esto (WTF !?), aquí está la página oficial del manual oficial de php que dice EXACTAMENTE lo que he publicado: real_escape_string @ PHP Manual.

+2

+1 He visto los documentos. Tal vez las personas están más acostumbradas a ver la forma de procedimiento en lugar de la forma orientada a objetos. – Ryan

+0

esto funcionó para mí, votó en contra: D –

+0

Eso es una publicación muy útil gracias hombre – PhpDude

1

Para las personas que podrían encontrar esto de nuevo ahora, me encontré con este problema cuando estoy migrando de PHP5 a PHP7. Estoy cambiando de

string mysql_real_escape_string(string $unescaped, [resource $link = NULL])

a:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

tanto, en otras palabras, la base de datos de enlace $ ya no es opcional es y se desplaza a la primera posición argumento. Si se deja fuera, devuelve una cadena vacía, aparentemente sin un error.

0

mysql_real_escape_string() devolverá la respuesta en blanco si no ha hecho la conexión a la base de datos ...

Cuestiones relacionadas