Първа точка:Ако получавате грешка от mysql_real_escape_string()
, това е, защото извиквате функцията, преди да сте свързани с базата данни.
Изглежда, че се свързвате с базата данни точно преди да изпълните заявка. Така че всичко, което направите, преди да извикате своя mm_mysqlquery()
функцията няма да има връзка.
mysql_real_escape_string()
функцията се нуждае от жива връзка с базата данни, така че може да направи правилния вид екраниране по отношение на набора от знаци на връзката. Така че трябва да се свържете преди ти избягаш.
По-добре е да направите това така или иначе, защото ако направите няколко заявки по време на една заявка на PHP, е по-малко излишно да се свържете веднъж и използвайте една и съща връзка за всичките си заявки.
Второ, моля, не приемайте предложения за използване на addslashes()
-- не прави същото като mysql_real_escape_string()
. Двете не са взаимозаменяеми. Трябва да придобиете навика да използвате mysql_real_escape_string()
.
Трето, вашият sani()
функция показва често срещано погрешно схващане.
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
Често срещаното погрешно схващане е, че имате нужда от всички тези функции, за да направите низ безопасен в SQL израз. Вие не го правите. Само mysql_real_escape_string()
необходимо е. Всички други функции в този пример не правят нищо за защита срещу SQL инжекция.
Тези функции са полезни, ако извеждате низ в HTML презентация и искате да намалите риска от XSS атаки, но след това mysql_real_escape_string()
е без значение.
Използвайте всеки тип дезинфекциращ метод в съответния контекст.