MySQL sorguları için kaçış Verilerle yardım isteyen

3 Cevap php

Tek yanıt olarak mysql_real_escape_string referans php.net için bana bir link gönderin lütfen. Ben sayfasından okudum ve genel kavramları anlamak ise, benim INSERT deyimi şu anda nasıl inşa edildiğini dayalı bazı sorun yaşıyorum.

Bugün, ben aşağıdaki kullanıyorum:

$sql = "INSERT INTO tablename VALUES ('', 
                                      '$_SESSION['Member1FirstName'], 
                                      '$_SESSION['Member1LastName'], 
                                      '$_SESSION['Member1ID'], 
                                      '$_SESSION['Member2FirstName'], 
                                      '$_SESSION['Member2LastName'], 
                                      '$_SESSION['Member2ID'] ....)

ve liste girilen bazı diğer değerlerle 20 + üyeleri için gider. Bu örneklerde insanların çoğu zaten tüm verileri bir dizide saklanır var gibi görünüyor.

Sitemde, ben formu girişleri, action = "" kendi kendine ayarlanır kabul, php doğrulama gerçekleşir ve doğrulama geçerse, veriler daha sonra işlemi (sayfa 3) (sonraki sayfaya yönlendiriliyorsunuz sayfa 2 OTURUM değişkenleri içine saklanır tüm süreç yaklaşık 8-10 sayfa).

3 Cevap

Zaten mysql_real_escape_string but I guess you don't know how kullanarak kullanmak gerektiğini bilmek gibi görünüyor. Eğer SQL içine yerleştirin her kullanıcı sağlanan dizesi için uygulamak gerekir. Aşağıdaki örnek bu açıklığa kavuşturmak gerekir:

$sql = "INSERT INTO tablename VALUES ('', '" .
    mysql_real_escape_string($_SESSION['Member1FirstName']) . "', '" .
    mysql_real_escape_string($_SESSION['Member1LastName']) . "', '" .
    etc..

Veya alternatif prepared statements içine bakmak ve daha kolay (ve hızlı) çözüm parametreleri bağlamak.

1) Eğer kapanış tek teklifi kaçırıyorsun ve değişkenler tek tırnak içinde değiştirilmesi değildir.

2) mysql_real_escape_string cevap, ancak sprintf ile deneyin:

$sql = sprintf("INSERT INTO tablename VALUES ('', '%s', '%s', '%d' )",
               mysql_real_escape_string( $_SESSION['Member1FirstName']),
               mysql_real_escape_string( $_SESSION['Member1LastName']),
               $_SESSION['Member1ID']); // %d forced it as a digit

http://us2.php.net/manual/en/function.sprintf.php

Neden mysql_real_escape_string kullanamıyorum?

Ayrıca sadece bir isim beklenir bazı karakterleri izin regexpi kullanabilirsiniz