Prepared statements

From MapbenderWiki

Jump to: navigation, search

Please remember to perform Code Cleaning!


Contents

Basic

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);
Personal tools