(PHP 5, PECL sqlite >= 1.0.0)
sqlite_escape_string — Bereitet einen String für die Verwendung als SQL-Parameter auf
sqlite_escape_string() bereitet den String item so auf, dass er korrekt innerhalb eines SQL-Befehls als Parameter genutzt werden kann. Diese Wandlung enhält die Verdopplung von einfachen Anführungszeichen (') und die Überprüfung von nicht binärkompatiblen Zeichen.
Auch wenn die Aufbereitung ein sicheres Einfügen der Daten ermöglicht, werden einfache Stringvergleiche und LIKE-Bedingungen in Ihren Abfragen unbrauchbar gemacht, wenn die Spalten Binärdaten enthalten. In der Praxis sollte dies kein Problem darstellen, weil Ihr Datenbankschema so ausgelegt sein sollte, dass keine Binärdaten genutzt werden (denn eigentlich könnte es besser sein, die Binärdaten auf andere Art und Weise z.B. in Dateien zu speichern).
The string being quoted.
Beinhaltet der Parameter item einen NUL Zeichen oder wenn er mit einem Zeichen beginnt, dessen ORDINAL Wert 0x01 ist, wird PHP ein binäres ENCODING Format anwenden, dass man sicher binäre Daten speichern und auslesenn kann.
Returns an escaped string for use in an SQLite SQL statement.
Hinweis: Nutzen Sie diese Funktion nicht, um Rückgabewerte von benutzerdefinierten Funktionen (UDF) vorzubereiten, die mittels von sqlite_create_funtion() oder sqlite_create_aggregate()erzeugt wurden. Nutzen Sie sqlite_udf_encode_binary() stattdessen.
addslashes() sollte NICHT genutzt werden, um Strings für SQLite-Anfragen aufzubereiten; es kann zu undefinierten Resultaten beim Abfragen der Daten führen.
You can try this (it works with strings and arrays):
<?php
// oop
class sqlite extends SQLiteDatabase {
public function escape($data) {
if(is_array($data))
return array_map("sqlite_escape_string", $data);
return sqlite_escape_string($data);
}
}
$db = new sqlite("dbname");
$values = array("hell'o", "he'y");
$values = $db->escape($values); // returns array("hell''o", "hey''y")
// procedural
function sqlite_myescape($data) {
if(is_array($data))
return array_map("sqlite_escape_string", $data);
return sqlite_escape_string($data);
}
$values = array("hell'o", "he'y");
$values = sqlite_myescape($values); // returns array("hell''o", "hey''y")
?>
@minots: simplify what you are doing:
<?php
function sqlite_escape_array( &$arr ) {
$invalid = array( 'argv', 'argc' );
foreach ( $arr as $key => $val )
if ( ( strtoupper( $key ) != $key ) && !is_numeric( $key ) && !in_array( $key, $invalid ) ) {
if ( is_string( $val ) )
$arr[$key] = sqlite_escape_string( $val );
else if ( is_array( $val ) )
sqlite_escape_array( $arr[$key] );
}
return $arr;
}
?>
I'm not sure if the condition is equivalent to yours, but this excludes any numeric key, any completely uppercase'd keys and some selected (argc and argv) special keys. In case of never passing $GLOBALS or $_SERVER as argument one might shorten everything to this as a "pipelined" version:
<?php
function sqlite_escape_array( $arr ) {
foreach ( $arr as $key => $val )
if ( is_string( $val ) )
$arr[$key] = sqlite_escape_string( $val );
else if ( is_array( $val ) )
$arr[$key] = sqlite_escape_array( $val );
return $arr;
}
?>
PHP's syntax is more powerful than those of many other languages, even when it's supporting their one's as well.
sometimes i you have to escape an array instead of a string.
my function to do it works like:
array sqlite_escape_array ( &array string)
<?php
function sqlite_escape_array(&$arr)
{
while ( list($key, $val) = each($arr) ):
if ( (strtoupper($key)!=$key OR "".intval($key) == "$key") && $key!="argc" and $key!="argv"):
if (is_string($val)):
$arr[$key]=sqlite_escape_string($val);
endif;
if (is_array($val)):
$arr[$key]=sqlite_escape_array($val);
endif;
endif;
endwhile;
return $arr;
}
?>