commit 106ef5c32f465652bb052cf9cf2c422ab7b19069
parent 50231dd7d366fe5b73f9d9bd627dd5a9612a890d
Author: dankert <devnull@localhost>
Date: Thu, 18 Mar 2010 23:32:52 +0100
Die Funktion zum Escapen von Zeichenketten muss in der RDBMS-spezifischen Unterklasse definiert werden. Addslashes() darf für SQLITE nicht verwendet werden.
Diffstat:
3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/db/db.class.php b/db/db.class.php
@@ -205,7 +205,9 @@ class DB
// Es handelt sich um eine nicht-vorbereitete Anfrage. Das gesamte
// SQL wird durch die SQL-Klasse erzeugt, dort werden auch die Parameter
// in die Abfrage gesetzt.
- $flatQuery = $query->getQuery();
+
+ $escape_function = method_exists($this->client,'escape')?$this->client->escape():'addslashes';
+ $flatQuery = $query->getQuery( $escape_function );
Logger::trace('DB query on DB '.$this->id."\n".$query->raw);
diff --git a/db/sqlite.class.php b/db/sqlite.class.php
@@ -124,6 +124,13 @@ class DB_sqlite
{
return true;
}
+
+
+ function escape()
+ {
+ return 'sqlite_escape_string';
+ }
}
+
?>
\ No newline at end of file
diff --git a/serviceClasses/Sql.class.php b/serviceClasses/Sql.class.php
@@ -220,8 +220,6 @@ class Sql
}
}
- //Html::debug($this,'bei '.$name);
- //unset( $this->param[$name] );
}
@@ -314,13 +312,16 @@ class Sql
/**
* Ermittelt die fertige SQL-Anfrage.
+ * @param Name einer Funktion, die eine Zeichenkette für die
+ * Datenbank schuetzt. Dies kann je nach verwendetem RDBMS
+ * unterschiedlich sein, daher diese Funktionsreferenz.
*/
- function &getQuery()
+ function &getQuery( $escape_function )
{
// Bereits gesetzte Parameter setzen.
foreach( $this->data as $name=>$data )
{
- if ( $data['type']=='string' ) $this->setParam($name,"'".addslashes($data['value'])."'" );
+ if ( $data['type']=='string' ) $this->setParam($name,"'".$escape_function($data['value'])."'" );
elseif ( $data['type']=='int' ) $this->setParam($name,(int)$data['value'] );
elseif ( $data['type']=='null' ) $this->setParam($name,'NULL' );
}