Prepared statements
From MapbenderWiki
Please remember to perform Code Cleaning! Mapbender code uses prepared statements to prevent SQL injections.
Contents |
Additional Information for older Versions
Refers to versions using:
- PHP < 5.1.x
- PostgreSQL < 7.4
- mysql < 4.1
Umstellung
- Konstante in mapbender.conf -> PREPAREDSTATEMENTS = true | false
- db_query() is deprecated
- db_prep_query(string_sql, array_values, array_types)
- z.B.: db_prep_query('SELECT * FROM user WHERE mb_user_name = $1 and mb_user_password = $2', array('root','rootPW');array('s','s'));
- string = s
- integer = i
- float = d
- remove addslashes()/mysql_escape() etc.
- you should not add a terminating semicolon
- validate
- is $params array
- is $types array
- are counts of $params and $types equal
nochmal in Prosa
- in den Sources suchen nach 'db_query'
- alle variablen Werte in $1,$2 ... $n umwandeln (die Reihenfolge ist ausschlaggebend!!!)
- ein Array mit den variablen Übergabeparametern anlegen
- in der Datenbank nach dem Datentyp dieser Variablen schauen
- ein Array der Datentypen anlegen (Reihenfolge s.o.)
- Das SQL-Grundgerüst und die beiden Arrays an die neue db_prep_query() schicken...
Beispiel
$sql = "SELECT e_src, e_target FROM gui_element WHERE e_id = 'back' AND fkey_gui_id = $1 ";
$v = array($gui_id);
$t = array('s');
$res = db_prep_query($sql, $v, $t);
