@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
(PHP 5, PECL sqlite:1.0-1.0.3)
sqlite_escape_string — Escapa una cadena de texto para poder usarla como parámetro en una consulta
Descripción
sqlite_escape_string() modifica la cadena proporcionada en el parámetro cadena de forma que se escapan los caracteres especiales y asà la cadena está lista para emplearse en las sentencias SQL de SQLite. Los cambios realizados incluyen doblar las comillas simples (') y comprobar que no existen caracteres binarios inseguros que se vayan a emplear en la cadena de consulta SQL.
Si la cadena contiene caracteres de tipo NUL o si empieza con un carácter cuyo valor ordinal sea 0x01, PHP aplica un esquema de codificación binaria para asegurar que los datos binarios pueden almacenarse (y recuperarse posteriormente) con seguridad.
Aunque la codificación permite transformar los datos binarios en seguros, impedirá que se puedan emplar comparaciones como LIKE en las columnas que contienen datos binarios. En la práctica sin embargo, este hecho no deberÃa ser un problema ya que en los esquemas de bases datos no se suelen emplear ese tipo de comparaciones con las columnas que almacenan datos binarios (de hecho, es mejor emplear otros medios para almacenar los datos binarios, como por ejemplo archivos en el sistema).
No se debe emplear la función addslashes() para escapar las cadenas que se utilizan en las consultas de SQLite, ya que puede provocar comportamientos indeseados a la hora de recuperar los datos.
Note: No se debe emplear esta función para codificar los datos devueltos por FDU (funciones definidas por el usuario) creadas con las funciones sqlite_create_function() o sqlite_create_aggregate(). Se debe emplear la función sqlite_udf_encode_binary() en su lugar.
sqlite_escape_string
29-Mar-2005 02:19
29-Mar-2004 11:03
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;
}
?>
