sql >> Database >  >> RDS >> Mysql

Kan mysql_real_escape_string niet gebruiken

Eerste punt:als je een foutmelding krijgt van mysql_real_escape_string() , is dat omdat je de functie aanroept voordat je bent verbonden met de database.

Het lijkt erop dat u verbinding maakt met de database vlak voordat u een query uitvoert. Dus alles wat u doet voordat u uw mm_mysqlquery() . aanroept functie heeft geen verbinding.

De mysql_real_escape_string() functie heeft een live verbinding met de database nodig, zodat het de juiste soort escape kan doen met betrekking tot de tekenset van de verbinding. U moet dus voor verbinding maken je ontsnapt.

Het is beter om dat toch te doen, want als je meerdere queries maakt in de loop van een enkel PHP-verzoek, kost het minder moeite om eenmaal verbinding te maken. en gebruik dezelfde verbinding voor al uw vragen.

Ten tweede, neem alsjeblieft geen suggesties om addslashes() te gebruiken -- het doet niet hetzelfde als mysql_real_escape_string() . De twee zijn niet uitwisselbaar. Maak er een gewoonte van om mysql_real_escape_string() te gebruiken .

Ten derde, uw sani() functie toont een veelvoorkomende misvatting.

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

De algemene misvatting is dat je al deze functies nodig hebt om een ​​string veilig te maken in een SQL-statement. Jij niet. Alleen mysql_real_escape_string() is noodzakelijk. Alle andere functies in dit voorbeeld beschermen niet tegen SQL-injectie.

Die functies zijn handig als u een tekenreeks uitvoert in een HTML-presentatie en u het risico op XSS-aanvallen wilt verkleinen, maar dan mysql_real_escape_string() is niet relevant.

Gebruik elk type ontsmettingsmethode in de juiste context.



  1. SQL Server-databases verplaatsen naar de cloud

  2. MYSQL en RDBMS

  3. LOG() Functie in Oracle

  4. Hoe schrijf je een IF ELSE-instructie in een MySQL-query?