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 — Escapa una cadena para ser usada como un parámetro para una consulta
Descripción
$item
)
sqlite_escape_string() escapará correctamente la cadena especificada mediante item
para ser usada en una sentencia SQL SQLite. Incluye la duplicación de los caracteres de comillas simples (') y la comprobación de caracteres binarios que no sean seguros en la consulta.
Aunque la codificación es segura para la inserción de datos, se hacen comparaciones de texto simples y cláusulas LIKE en las consultas inutilizables para las columnas que contienen datos binarios. En la práctica, esto no deberia ser un problema, ya que en el esquema no se deberian usar tales cosas en columnas binarias (de hecho, podría ser mejor almacenar datos binarios utilizando otros métodos, como por ejemplo en ficheros).
Parámetros
-
item -
El string que va a ser escapado.
Si
itemcontiene un caracterNUL, o si este empieza con caracter cuyo valor ordinal es 0x01, PHP aplicará un esquema de codificación binaria, para que pueda ser almacenado con seguridad y recuperar datos binarios.
Valores devueltos
Devuelve un string escapado para ser usado en una sentencia SQL SQLite SQL.
Notas
Nota: No usar esta función para codificar los valores devueltos desde los UDFs creados usando sqlite_create_function() o sqlite_create_aggregate() - usar en su lugar sqlite_udf_encode_binary().
addslashes() NO deberia ser usado para escapar strings para consultas SQLite; ya que esto conducirá a extraños resultado cuando se devuelvan sus datos.
Ver también
- sqlite_udf_encode_binary() - Codificar datos binarios antes de devolverlos desde una UDF
@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;
}
?>
