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>
sqlite_escape_string
(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)
sqlite_escape_string — Bir sorgu deÄŸiÅŸtirgesi olarak kullanmak üzere bir dizgeyi önceler
Açıklama
$öğe
)
Bir SQLite deyiminde kullanmak için öğe ile
belirtilen dizgeye önceleme uygular. Buna tek tırnakların tek tırnaklarla
öncelenmesi ve ikil olarak güvenilir olmayan karakterlerin uygun şekilde
öncelenmesi dahildir.
Kodlamak suretiyle verinin güvenle yerleştirilmesini sağlasa da basit metin karşılaştırmalarıyla bunu yaptığından, LIKE deyimlerinde olduğu gibi ikil veri içeren sütunlar için kullanışsızdır. Uygulamada, böyle şeyleri ikil sütunlarda saklamamanız gerektiğinden (aslında ikil verileri başka bir yerde örneğin dosyalarda saklamanız daha iyidir) bunun bir sorun olmaması gerekir.
DeÄŸiÅŸtirgeler
-
öğe -
Öncelenecek dizge.
Belirtilen dizge bir NUL karakteri içeriyorsa veya 0x01 karakteri ile başlıyorsa PHP'nin uygulayacağı ikil kodlama şemasından dolayı böyle ikil verileri rahatça alıp saklayabilirsiniz.
Dönen Değerler
Bir SQLite deyiminde kullanmak üzere bir öncelenmiş dizge döndürür.
Notlar
Bilginize: sqlite_create_function() veya sqlite_create_aggregate() kullanılarak oluşturulmuş kullanıcı tanımlı bir işlevden dönen bir değeri kodlamak için bu işlevi değil sqlite_udf_encode_binary() işlevini kullanın.
SQLite sorgularında kullanacağınız dizgeler için addslashes() işlevini kullanmayın; veriyi veritabanından alırken tuhaf sonuçlar verebilir.
Ayrıca Bakınız
- sqlite_udf_encode_binary() - Bir kullanıcı tanımlı iÅŸlevden dönecek ikil veriyi döndürmeden önce kodlamak için kullanılır
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")
?>
@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.
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;
}
?>
