openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
db/db.class.php | 4+++-
db/sqlite.class.php | 7+++++++
serviceClasses/Sql.class.php | 9+++++----
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' ); }