Citat:
Originalno napisao Ivan
mysql_query() ne podrzava visetruke kverije u jednom pozivu ali npr u SQLlite i PostgreSQL funkcijama je ovo moguce izvesti.
|
ok, tacno je to sto si rekao, mada je ovo kontradiktorna prica, posto sa SQLlite ili PGSQL-om svakako neces ni koristiti mysql_real_escape string
Evo da rezimiram, za one sa jeftinijim ulaznicama
1. Ako je ikako moguce koristiti prepared statements. Ne samo sto je sigurnije, vec je i mnogo efikasnije kad se isti SQL izvrsava vise puta, samo se menjaju parametri. Mysql drajveri to ne podrzavaju, ali mysqli, pdo, postgres podrzavaju, tako da samo php4 + mysql kombinacija imaju problem.
2. Ako vozimo php4 i mysql (jos uvek najcesca varijanta) onda je potrebno uraditi sledece:
- mysql_real_escape_string - za obicne upite
- mysql_real_escape_string($sql) + addcslashes($sql, '%_') - za upite unutar LIKE izraza
Primer: SELECT * FROM tabela WHERE a=$a AND b LIKE '$b';
Ovde $a treba escapeovati samo sa mysql_real_escape_string, dok za $b moramo da koristimo i addcslashes
i to je to... a evo i moja funkcija za escape koja mislim da lepo sljaka:
PHP kôd:
/**
* Escapes special characters in a string for use with mySQL queries
* WARNING: MySQL connection is required for this function !! (or you'll get a E_WARNING and FALSE as the result)
* @author Ivan Dilber (aka ivanhoe)
*
* @param string $str String to be escaped
* @param boolean $using_like Do we need to escape extra characters (% and _) for strings used inside LIKE expression
* @return string
*/
function escape($str, $using_like=false) {
if( get_magic_quotes_gpc() ) // if already escaped
$str = stripslashes($str);
$str = mysql_real_escape_string($str);
return ( $using_like? addcslashes($str, '%_') : $str );
}