2010-06-09 13 views
10

Sto utilizzando una richiesta jQuery AJAX a una pagina denominata like.php che si collega al mio database e inserisce una riga. Questo è il codice like.php:mysql_real_escape_string() crea solo una stringa vuota?

<?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 linea problematica è $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));. Sembra solo restituire una stringa vuota, e nel mio database sotto la colonna like_message tutto quello che vedo sono voci vuote. Se rimuovo mysql_real_escape_string(), funziona perfettamente.

Ecco il mio codice jQuery se aiuta.

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

Tutto questo codice jQuery funziona correttamente, l'ho provato autonomamente.

Qualsiasi aiuto è molto apprezzato, grazie.

+0

Prima di eseguire SQL eseguire 'var_dump ($ likeMsg); echo $ sql; muori; e guarda cosa contengono queste variabili. Dopodiché, se è ok, incolla l'output SQL in phpMyAdmin e controlla il risultato. – hsz

risposta

22

Sei sicuro al 1000% che $_POST["likeMsg"] contenga effettivamente qualcosa?

Per quanto riguarda mysql_real_escape_string() restituire un valore vuoto, il manual dice che c'è solo una situazione in cui ciò può accadere:

Nota: una connessione MySQL è necessario per poter usare mysql_real_escape_string(), altrimenti un errore di livello E_WARNING è generato e FALSE viene restituito. Se link_identifier non è definito, viene utilizzata l'ultima connessione MySQL.

questo non sembra essere il caso qui, come si ha una connessione aperta. Strano.

+0

Ho letto che quando ho cercato su Google il problema. Ho iniziato una connessione al database prima di usare 'mysql_real_escape_string()'. –

+0

@James quindi deve essere quel dato stesso. Puoi mostrare un dump di '$ _POST'? –

+0

@James in alternativa, puoi provare esplicitamente a specificare la connessione come parametro? –

1

Fare un var_dump di $ _POST ['likeMsg'] e un var_dump di $ likeMsg. Questo ti dà informazioni su cosa va storto.

13

Come le altre risposte non fanno chiaro esattamente cosa fare, ecco la mia:

Quando si esegue

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

avete bisogno di sfuggire in questo modo:

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

NOTA : Perché le persone stanno facendo downvoting su questo (WTF !?), ecco la pagina ufficiale del manuale php ufficiale che dice ESATTAMENTE quello che ho postato: real_escape_string @ PHP Manual.

+2

+1 Ho visto i documenti. Forse le persone sono più abituate a vedere la forma procedurale piuttosto che la forma orientata agli oggetti. – Ryan

+0

questo ha funzionato per me, con la diffusione di: D –

+0

Questo è un post davvero utile grazie all'uomo – PhpDude

1

Per le persone che potrebbero trovarlo di nuovo ora, mi sono imbattuto in questo problema mentre sto migrando da PHP5 a PHP7. Sto cambiando da

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

a:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

Quindi, in altre parole, il $ database link non è più facoltativa è e si muove verso la prima posizione argomento. Se lasciato fuori, restituisce una stringa vuota, senza errori, a quanto pare.

0

mysql_real_escape_string() restituirà una risposta vuota se non hai effettuato la connessione al database ...

Problemi correlati