SORU
16 Kasım 2009, PAZARTESİ


Neden daha mysql_real_escape_string MySQL sorguları/querystrings kaçmak için PDO daha mı iyi?

İyi MySQL kaçmak yerine mysql_real_escape_string PDO kullanarak olacağımı söylediler.

Belki de geçiriyorum beyin ölümü gerçekleşmiş bir gün (ya da bu olabilir aslında ben hiçbir streç hayal doğal bir programcı ve ben hala çok acemi sahne gelince PHP), ama sahip kullanıma PHP manuel ve okuma the entry on PDO, ben hala net olarak ne PDO aslında ve bu yüzden daha iyi kullanma mysql_real_escape_string. Bu olabilir, çünkü değil gerçekten var kulpları ile karmaşıklığı OOP henüz (ben olduğunu sanıyorum bir ilgisi OOP), ama bundan başka değişkenler ve dizi değerleri gibi bir kolon karşısında onlara, ben hala emin değilim ne olduğundan ve nasıl kullandığınız (ve bu yüzden daha iyi mysql_real_escape_string. (O da olabilir yok aslında bilmiyorum gerçekten açık ve net bir anlayış ne 'sınıflar', bu yüzden ne zaman okudum "PDO sınıfı" ben hiç akıllıca gerçekten).

an article ya da iki okumak zorunda 'Geliştirici Bölgesi' MySQL bit web sitesi, hala net değilim. Ben bile anlamaya ne var şu anda, bence muhtemelen bunu kullanarak biraz ötesinde şu anda beni, ama ben hala ilgileniyor genişletilmesi eğitimim ve öğrenmenin nasıl yapabilirim geliştirmek şeyler.

Biri bana açıklayabilir, 'düz İngilizce PDO (veya konu basit bir İngilizce ile yazılmış bir yönde bana gelin), ve nasıl kullanma hakkında gitmek istiyorum ne'?

CEVAP
16 Kasım 2009, PAZARTESİ


Geçerli cevaplar sorunuza genel bir bakış daha yönelik olsa da detay olarak, bunu deneyeceğim:

PDO sınıfları tüm işlevselliği saklanması için bir veritabanı ile etkileşim için gerekli amaç. Onlar tanımlayarak 'yöntemleri (işlevler için OO salonu)' ve 'özellikleri (değişkenleri için OO salonu)'. Bir olarak kullanmak istiyorumkomple değiştirilmesi'standart' bir veritabanına konuşmak için. şu an kullandığınız fonksiyonlar için

Yani yerine çağıran bir dizi 'mysql_doSomething()' fonksiyonları, depolama sonuçlarında kendi değişkenleri, olur 'örneğini' bir nesneden PDO sınıfı ('class' = soyut tanımı, 'nesne' = somut, kullanılabilir örnek bir sınıf) ve arama yöntemleri üzerinde bu nesne için aynı.

PDO olmadan bir örnek olarak, şöyle bir şey yapmak istiyorum:

// Get a db connection
$connection = mysql_connect('someHost/someDB', 'userName', 'password');
// Prepare a query
$query = "SELECT * FROM someTable WHERE something = " . mysql_real_escape_string($comparison) . "'";
// Issue a query
$db_result = mysql_query($query);
// Fetch the results
$results = array();
while ($row = mysql_fetch_array($db_result)) {
  $results[] = $row;
}

bu eşdeğer PDO kullanarak olacağını ise:

// Instantiate new PDO object (will create connection on the fly)
$db = new PDO('mysql:dbname=someDB;host=someHost');
// Prepare a query (will escape on the fly)
$statement = $db->prepare('SELECT * FROM someTable WHERE something = :comparison');
// $statement is now a PDOStatement object, with its own methods to use it, e.g.
// execute the query, passing in the parameters to replace
$statement->execute(array(':comparison' => $comparison));
// fetch results as array
$results = $statement->fetchAll();

Sözdizimi dışında ilk bakışta pek fark yok gibi. Ama PDO sürümü bazı avantajları vardır, veritabanı bağımsızlığı olan büyük bir:

Eğer PostgreSQL veritabanı yerine konuşmak istersen, sadece başlatmasını arama new PDO()9 mysql: değiştirirsin. Eski yöntem, sen git tüm kod değiştirme 'mysql_doSomething()' fonksiyonları ile 'pg_doSomthing()' muadili (her zaman kontrol etmek için potansiyel farklılıkları parametre işleme). Aynı birçok desteklenen diğer veritabanı motorları için geçerli olacaktı.

Sorunuzun geri almak için, PDO temelde sadece bazı kısayollar/iyileştirmeler/avantajlar sunarken aynı şeyleri elde etmek için farklı bir yol sağlar. Örneğin, kaçan otomatik olarak uygun şekilde kullanmakta olduğunuz veritabanı altyapısı için gerekli olur. Ayrıca parametre değiştirme (SQL Enjeksiyonu önler, örnek gösterilen değil) çok daha kolay, daha az hata eğilimli hale getiriyor.

some OOP basics diğer avantajlar hakkında bir fikir edinmek için okuyun.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • David Wills

    David Wills

    31 Aralık 2007
  • Wild Academy

    Wild Academy

    8 Aralık 2009