SORU
14 HAZİRAN 2011, Salı


Birden fazla sorgu için PDO desteği (PDO_MYSQL, PDO_MYSQLND)

Biliyorum PDO birden fazla sorgu bir ifade içinde idam edilecek desteklemiyor. Googleing oldum ve birkaç mesaj PDO_MYSQL söz ve PDO_MYSQLND bulundu.

PDO_MySQL bir daha tehlikeli. herhangi bir diğer geleneksel uygulama daha MySQL uygulamaları. Geleneksel MySQL sağlar sadece tek bir SQL sorgu. İçinde Böyle bir sınırlama,PDO_MySQL var ama enjekte edilmeye riski birden fazla sorgu.

Kimden: Protection against SQL Injection using PDO and Zend Framework (June 2010; by Julian)

PDO_MYSQL ve PDO_MYSQLND birden fazla sorgu için destek sağlamak gibi görünüyor, ama onlar hakkında daha fazla bilgi bulmak mümkün değil. Bu projeler üretilmiyor? Şimdi herhangi bir şekilde birden fazla sorgu PDO kullanarak çalıştırmak için var.

CEVAP
23 HAZİRAN 2011, PERŞEMBE


Bildiğim kadarıyla, PDO_MYSQLND PHP 5.3 PDO_MYSQL yerini aldı. Kafa karıştırıcı parça adı hala PDO_MYSQL olmasıdır. Şimdi ND MySQL PDO varsayılan sürücü.

Genel olarak, birden fazla sorgu aynı anda yürütmek gerekir:

  • PHP 5.3
  • mysqlnd
  • Hazırlanan ifadeleri taklit. PDO::ATTR_EMULATE_PREPARES 6 ** ayarlandığından emin olun (varsayılan). Alternatif olarak hazırlanan ifadeleri kullanmaktan kaçının ve $pdo->exec doğrudan kullanabilirsiniz.

Exec kullanarak

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');

// works regardless of statements emulation
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);

$sql = "
DELETE FROM car; 
INSERT INTO car(name, type) VALUES ('car1', 'coupe'); 
INSERT INTO car(name, type) VALUES ('car2', 'coupe');
";

try {
    $db->exec($sql);
}
catch (PDOException $e)
{
    echo $e->getMessage();
    die();
}

İfadeler kullanarak

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');

// works not with the following set to 0. You can comment this line as 1 is default
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);

$sql = "
DELETE FROM car; 
INSERT INTO car(name, type) VALUES ('car1', 'coupe'); 
INSERT INTO car(name, type) VALUES ('car2', 'coupe');
";

try {
    $stmt = $db->prepare($sql);
    $stmt->execute();
}
catch (PDOException $e)
{
    echo $e->getMessage();
    die();
}

Bir not:

Özenerek hazırlanmış deyimleri kullanırken, DSN (mevcut 5.3.6 beri) uygun kodlama gerçek verileri yansıtan () ayarlanmış olduğundan emin olun. Aksi takdirde there can be a slight possibility for SQL injection if some odd encoding is used.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011
  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008