I mysql_real_escape_string()
SQL Server için alternatif arıyorum. addslashes()
benim en iyi seçenek kullanılabilir veya başka bir alternatif işlevi var mı?
Edit: Alternatif mysql_error()
da yararlı olacaktır.
addslashes()
tam olarak yeterli değil, ancak PHP'nin mssql paket herhangi bir iyi bir alternatif sağlamaz. Çirkin ama tamamen genel bir çözüm, yani bir onaltılık bytestring olarak verileri kodlar
$unpacked = unpack('H*hex', $data);
mssql_query('
INSERT INTO sometable (somecolumn)
VALUES (0x' . $unpacked['hex'] . ')
');
Soyutlanmış, olurdu:
function mssql_escape($data) {
if(is_numeric($data))
return $data;
$unpacked = unpack('H*hex', $data);
return '0x' . $unpacked['hex'];
}
mssql_query('
INSERT INTO sometable (somecolumn)
VALUES (' . mssql_escape($somevalue) . ')
');
mysql_error()
eşdeğerdir mssql_get_last_message()
.
function ms_escape_string($data) {
if ( !isset($data) or empty($data) ) return '';
if ( is_numeric($data) ) return $data;
$non_displayables = array(
'/%0[0-8bcef]/', // url encoded 00-08, 11, 12, 14, 15
'/%1[0-9a-f]/', // url encoded 16-31
'/[\x00-\x08]/', // 00-08
'/\x0b/', // 11
'/\x0c/', // 12
'/[\x0e-\x1f]/' // 14-31
);
foreach ( $non_displayables as $regex )
$data = preg_replace( $regex, '', $data );
$data = str_replace("'", "''", $data );
return $data;
}
Burada bazı kod CodeIgniter yırtık. İşleri iyi ve temiz bir çözümdür.
Sen PDO Library içine bakmak olabilir. Eğer doğru hazırlanmış deyimleri yaparsanız otomatik dizeleri herhangi bir kötü karakter kaçacak PDO ile hazırlanan ifadeleri kullanabilirsiniz. Bu PHP 5 için sadece ben düşünüyorum.
i know, litle bit late, but answer from 'Feb 22 '09 at 12:10' by chaos isn`t fit all queries. E.g: "CREATE LOGIN [0x6f6c6f6c6f] FROM WINDOWS" will give you exception
P.S. , php için mssql sürücü bakmak http://msdn.microsoft.com/library/cc296181%28v=sql.90%29.aspx ve sqlsrv_prepare fonksiyonu, hangi olabilir bağlar params.
p.s.s. Ayrıca yapmadım `hangi t ;) Yukarıdaki sorgu ile size yardımcı olur
Saat boyunca bu mücadele sonrasında, neredeyse iyi hisseden bir çözüm ile geldim.
Hexstring değerleri dönüştürme Chaos 'cevabı özellikle datetime sütunlar, her veri türü ile çalışmaz.
Ben PHP'nin PDO::quote()
kullanmak, ama PHP ile gelir olarak, PDO::quote()
, MS SQL Server ve getiri FALSE
için desteklenmiyor. Iş bunun için çözüm bazı Microsoft demetleri indirmek için oldu:
Bundan sonra aşağıdaki gibi bir DSN kullanarak PDO PHP ile bağlayabilirsiniz:
sqlsrv:Server=192.168.0.25; Database=My_Database;
Using the UID
and PWD
parameters in the DSN didn't worked, so username and password are passed as the second and third parameters on the PDO constructor when creating the connection.
Now you can use PHP's PDO::quote()
. Enjoy.
Aşağıdaki normal bir ifade ile, mysql_real_escape_string
kendi versiyonunu rulo (ve bunun üzerine geliştirmek) olabilir: [\000\010\011\012\015\032\042\047\134\140]
. Yani aşağıdaki karakterlerden ilgilenir: null, sil, yatay sekme, yeni satır, satırbaşı, yerine, çift tırnak, tek tırnak, eğik çizgi, ters aksan. Backspace ve yatay sekme mysql_real_escape_string
tarafından desteklenmemektedir.