Bir mysql veritabanı sorgulama ne karakterlere izin YAPIYORSUNUZ?

4 Cevap php

Ben de, ben mysql bir hata olsun özel karakterleri girmek zaman, bir formda bir textarea var. (Mysql içine ekleme işi yapan bir php-dosyaya formu gönderilirken)

Ben izin verilmez ki tam olarak ne karakterleri bilmek gerekir, ya da ben göndermeden önce textarea doğrulamak böylece daha kolay izin verilir, tam olarak ne karakter kazıldığında, olacaktır.

Bilen var mı?

I mysql_real_escape_string() denedim ama işe yaramadı ...

NOT: textarea, kullanıcıların bu gibi bazı özel karakter girmek gerekiyor:

 + , . ; : - _ space & % ! ? = # * ½ @ / \ [ ] ' " < > £ $ €

Muhtemelen hepsini aldım ...

Ben bunu nasıl yapabilirim?

Teşekkürler

UDPATE

Benim mysql_query:

mysql_query("INSERT INTO cars_db (description) VALUES ('$ad_text')");

UPDATE

Mysql hatası:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a"a!a?aa+a-a_a
a/a\a[a]a}a{a&a%a#a@a¨a^a*a*aa,a.a:a;a|a½a
§a' at line 1

4 Cevap

Bir veritabanı sütun teknik bu karakterlerden herhangi tutabilir. Sorun sizin sorguda düzgün onları kaçan olmamasıdır.

Aşağıdaki gibi mysql_real_escape_string kullanarak bunu yapmak için bir yolu yoludur:

$sql=sprintf("insert into cars_db (description) values ('%s')",
    mysql_real_escape_string($_POST['description']) );

//execute query and show errors that result...
$result = mysql_query($sql);
if (!$result) {
    die("Oops:<br>$sql<br>".mysql_error());
}

Başka bir yol daha kolay tutucular ile hazırlanmış deyimleri kullanmayı kolaylaştırır PDO veya adodb gibi bir kütüphane kullanmaktır. Bu tür kütüphaneler sorguları enjekte verileri düzgün kaçtı emin olun.

Bu sorunu çözer, ama bir SQL enjeksiyon saldırıları gerçekleştirmek için zorlaşır çünkü aynı zamanda, sizin kod güvenliğini artırır, çünkü bu sadece iyi bir uygulamadır.

Başka bir yol hazırlanmış deyimleri kullanmak olacaktır. Bu emin SQL enjeksiyonu mümkün değildir yapar.

Bunun yerine sorgu çelme şekilde değil karakterler kaçan, neden gelen bir dize parametresi bir saklı yordam oluşturmak değil. Sadece formu değişkenin değerini geçmek (veya bir dizeye kaydetmek) ve saklı yordam bu geçmektedir.

Bunu yapın:

$ad_text = mysql_real_escape_string($ad_text);
mysql_query("INSERT INTO cars_db (description) VALUES ('$ad_text')");

Mysql_real_escape_string ve SQL enjeksiyonu kadar okuyun. Bu uygulama büyük bir güvenlik açığı olduğunu.

http://us.php.net/mysql%5Freal%5Fescape%5Fstring