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")
?>
sqlite_escape_string
(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)
sqlite_escape_string — Inserisce il carattere di escape in una stringa da utilizzare in una query
Descrizione
$item
)
La funzione sqlite_escape_string() inserisce i caratteri di escape nella stringa
indicata da item, per poterla utilizzare
nelle istruzioni SQL. Questo processo include il raddoppio dell'apice
singolo (') e la verifica della presenza
di dati binari non sicuri nella stringa.
Sebbene la codifica binaria permetta un sicuro inserimento dei dati, questo rende inutilizzabile i semplici confronti di testo e la clausola LIKE sulle colonne che contengono dati binari. In pratica, non dovrebbe essere un problema, se nello schema definito non si prevede l'uso di tali funzioni su colonne binarie (infatti è meglio memorizzare dati binari in altri modi, tipo in file a parte).
Elenco dei parametri
-
item -
La string sul quale effettuare l'escape.
Se il parametro
itemcontiene un NUL, oppure comincia con un carattere il cui numero ordinale è 0x01, il PHP applicherà lo schema di codifica binaria in modo da potere memorizzare e recuperare il dato in binario.
Valori restituiti
Ritorna una string sul quale è stato effettuato l'escape da utilizzare in una istruzione SQL di SQLite.
Note
Nota: Non utilizzare questa funzione per codificare i dati restituiti da funzioni UDF create tramite sqlite_create_function() o sqlite_create_aggregate() - utilizzare invece sqlite_udf_encode_binary().
La funzione addslashes() NON dovrebbe essere utilizzata per inserire i caratteri di escape nelle query SQLite; questa porta a strani risultati quando si recuperano i dati.
@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.
sqlite_escape_string() does not catch all HTML characters that may
conflict with a browser display. Notice the difference with the
custom routine below
<?php
# php lib command
$str = "Advoid! /slashes\, 'single' and these <too>";
$str = sqlite_escape_string($str);
echo "<br>$str<br>";
# custom function
$str = "Advoid! /slashes\, 'single' and these <too>";
$str = clean($str);
echo "<br>$str<br>";
function clean($str) {
$search = array('&' , '"' , "'" , '<' , '>' );
$replace = array('&', '"', ''', '<', '>' );
$str = str_replace($search, $replace, $str);
return $str;
}
?>
Output:
Advoid! /slashes\, "single" and these
Advoid! /slashes\, 'single' and these <too>
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;
}
?>
