Mysql
 sql >> Database >  >> RDS >> Mysql

Impossibile utilizzare mysql_real_escape_string

Primo punto:se ricevi un errore da mysql_real_escape_string() , è perché stai chiamando la funzione prima di essere connesso al database.

Sembra che ti connetti al database subito prima di eseguire una query. Quindi qualsiasi cosa tu faccia prima di chiamare il tuo mm_mysqlquery() la funzione non avrà una connessione.

Il mysql_real_escape_string() la funzione richiede una connessione live al database, quindi può eseguire il giusto tipo di escape rispetto al set di caratteri della connessione. Quindi devi connetterti prima stai scappando.

È comunque meglio farlo, perché se si effettuano più query nel corso di una singola richiesta PHP, è meno sovraccarico connettersi una volta e usa la stessa connessione per tutte le tue domande.

In secondo luogo, non accettare suggerimenti per utilizzare addslashes() -- non fa la stessa cosa di mysql_real_escape_string() . I due non sono intercambiabili. Dovresti prendere l'abitudine di usare mysql_real_escape_string() .

Terzo, il tuo sani() la funzione mostra un malinteso comune.

function sani($string){     
  $string = strip_tags($string); 
  $string = htmlspecialchars($string); 
  $string = trim(rtrim(ltrim($string))); 
  $string = mysql_real_escape_string($string);
  return $string;
}

L'idea sbagliata comune è che hai bisogno di tutte queste funzioni per rendere sicura una stringa in un'istruzione SQL. Tu no. Solo mysql_real_escape_string() è necessario. Tutte le altre funzioni in questo esempio non fanno nulla per proteggere dall'iniezione SQL.

Queste funzioni sono utili se emetti una stringa in una presentazione HTML e vuoi ridurre il rischio di attacchi XSS, ma poi mysql_real_escape_string() è irrilevante.

Utilizzare ogni tipo di metodo igienizzante nel contesto appropriato.