sql >> Databasteknik >  >> RDS >> Mysql

Kan inte använda mysql_real_escape_string

Första punkten:Om du får ett felmeddelande från mysql_real_escape_string() , det beror på att du anropar funktionen innan du är ansluten till databasen.

Det ser ut som att du ansluter till databasen precis innan du kör en fråga. Så allt du gör innan du anropar din mm_mysqlquery() funktionen kommer inte att ha en anslutning.

mysql_real_escape_string() funktion behöver en live-anslutning till databasen, så den kan göra rätt typ av escape med avseende på anslutningens teckenuppsättning. Så du måste ansluta före du flyr.

Det är bättre att göra det ändå, för om du gör flera frågor under loppet av en enda PHP-förfrågan är det mindre omkostnader att ansluta en gång och använd samma anslutning för alla dina frågor.

För det andra, ta inte emot förslag om att använda addslashes() -- det gör inte samma sak som mysql_real_escape_string() . De två är inte utbytbara. Du bör ta för vana att använda mysql_real_escape_string() .

För det tredje, din sani() funktion visar en vanlig missuppfattning.

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

Den vanliga missuppfattningen är att du behöver alla dessa funktioner för att göra en sträng säker i en SQL-sats. Det gör du inte. Endast mysql_real_escape_string() är nödvändigt. Alla andra funktioner i det här exemplet skyddar inte mot SQL-injektion.

Dessa funktioner är användbara om du matar ut en sträng i en HTML-presentation och du vill minska risken för XSS-attacker, men då mysql_real_escape_string() är irrelevant.

Använd varje typ av desinficeringsmetod i dess lämpliga sammanhang.



  1. Python+MySQLdb konstigt problem

  2. Hur låser jag läs/skriv till MySQL-tabeller så att jag kan välja och sedan infoga utan att andra program läser/skriver till databasen?

  3. SQL UTLÄNDSK NYCKEL

  4. Strängsammansättning i MySQL