sqlite_escape_string

(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)

sqlite_escape_stringEscapa una cadena para ser usada como un parámetro para una consulta

Descripción

sqlite_escape_string ( string $item ) : string

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 item contiene 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().

Advertencia

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

add a note add a note

User Contributed Notes 4 notes

up
3
carlo_greco at live dot it
15 years ago
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")
?>
up
1
soletan at toxa dot de
19 years ago
@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.
up
1
20 years ago
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;
}
?>
up
-1
jwzumwalt at neatinfo dot com
13 years ago
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('&amp;', '&quot;', '&#39;', '&lt;', '&gt;' );

 
$str = str_replace($search, $replace, $str);
  return
$str;
}
?>

Output:
Advoid! /slashes\, "single" and these
Advoid! /slashes\, 'single' and these <too>
To Top