PHP 5.6.0 released

sqlite_escape_string

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

sqlite_escape_stringInserisce il carattere di escape in una stringa da utilizzare in una query

Descrizione

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

Avviso

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.

Vedere anche:

add a note add a note

User Contributed Notes 4 notes

up
3
carlo_greco at live dot it
4 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
jwzumwalt at neatinfo dot com
2 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>
up
2
soletan at toxa dot de
9 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
0
Minots Estich <minots at D0X dot de>
10 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;
}
?>
To Top