PHP Doku:: Bereitet einen String für die Verwendung als SQL-Parameter auf - function.sqlite-escape-string.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDatenbankerweiterungenAnbieterspezifische DatenbankerweiterungenSQLiteSQLite Funktionensqlite_escape_string

Ein Service von Reinhard Neidl - Webprogrammierung.

SQLite Funktionen

<<sqlite_error_string

sqlite_exec -- SQLiteDatabase->exec>>

sqlite_escape_string

(PHP 5, PECL sqlite >= 1.0.0)

sqlite_escape_stringBereitet einen String für die Verwendung als SQL-Parameter auf

Beschreibung

string sqlite_escape_string ( string $item )

sqlite_escape_string() bereitet den String item so auf, dass er korrekt innerhalb eines SQL-Befehls als Parameter genutzt werden kann. Diese Wandlung enhält die Verdopplung von einfachen Anführungszeichen (') und die Überprüfung von nicht binärkompatiblen Zeichen.

Auch wenn die Aufbereitung ein sicheres Einfügen der Daten ermöglicht, werden einfache Stringvergleiche und LIKE-Bedingungen in Ihren Abfragen unbrauchbar gemacht, wenn die Spalten Binärdaten enthalten. In der Praxis sollte dies kein Problem darstellen, weil Ihr Datenbankschema so ausgelegt sein sollte, dass keine Binärdaten genutzt werden (denn eigentlich könnte es besser sein, die Binärdaten auf andere Art und Weise z.B. in Dateien zu speichern).

Parameter-Liste

item

The string being quoted.

Beinhaltet der Parameter item einen NUL Zeichen oder wenn er mit einem Zeichen beginnt, dessen ORDINAL Wert 0x01 ist, wird PHP ein binäres ENCODING Format anwenden, dass man sicher binäre Daten speichern und auslesenn kann.

Rückgabewerte

Returns an escaped string for use in an SQLite SQL statement.

Anmerkungen

Hinweis: Nutzen Sie diese Funktion nicht, um Rückgabewerte von benutzerdefinierten Funktionen (UDF) vorzubereiten, die mittels von sqlite_create_funtion() oder sqlite_create_aggregate()erzeugt wurden. Nutzen Sie sqlite_udf_encode_binary() stattdessen.

Warnung

addslashes() sollte NICHT genutzt werden, um Strings für SQLite-Anfragen aufzubereiten; es kann zu undefinierten Resultaten beim Abfragen der Daten führen.

Siehe auch


3 BenutzerBeiträge:
- Beiträge aktualisieren...
carlo_greco at live dot it
12.12.2009 18:06
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")
?>
soletan at toxa dot de
29.03.2005 14:19
@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.
Minots Estichá
29.03.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;
}
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)