SORU
24 Temmuz 2009, Cuma


PDO Hazırlanan Ekler tek sorguda birden fazla satır

Şu anda MySQL SQL bu tür tek bir sorguda ınsert değerleri birden çok satır için kullanıyorum:

INSERT INTO `tbl` (`key1`,`key2`) VALUES ('r1v1','r1v2'),('r2v1','r2v2'),...

PDO üzerine okumalar, kullanımı, tablolar, sorgular bana statik daha iyi bir güvence vermek gerekir.

Bu nedenle "bir sorgu kullanarak değerleri birden çok satır ekleme" hazırlanmış deyimleri kullanarak. üretmek için mümkün olup olmadığını bilmek istiyorum

Evet, biliyorum bunu nasıl uygulayabilir miyim?

CEVAP
20 Ocak 2010, ÇARŞAMBA


Birden fazla PDO Hazırlanmış Deyimleri ile Değerleri Ekleyin

İçinde birden çok değer ekleme deyimi yürütme. Neden bu sayfaya göre daha hızlı düzenli ekler daha çünkü. http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

$datafields = array('fielda', 'fieldb', ... );

$data[] = array('fielda' => 'value', 'fieldb' => 'value' ....);
$data[] = array('fielda' => 'value', 'fieldb' => 'value' ....);

daha fazla veri değerleri veya muhtemelen verilerin dolduran bir döngü var.

Hazırlanan ekler ile ekleme alanları ve oluşturmak için alanların sayısını bilmek gerekir ? bağlamak için yer tutucular parametreleri.

insert into table (fielda, fieldb, ... ) values (?,?...), (?,?...)....

Bu ınsert deyimi gibi bakmak istiyorum nasıl temelde.

Şimdi, kodu:

function placeholders($text, $count=0, $separator=","){
    $result = array();
    if($count > 0){
        for($x=0; $x<$count; $x  ){
            $result[] = $text;
        }
    }

    return implode($separator, $result);
}
$pdo->beginTransaction(); // also helps speed up your inserts.
$insert_values = array();
foreach($data as $d){
    $question_marks[] = '('  . placeholders('?', sizeof($d)) . ')';
    $insert_values = array_merge($insert_values, array_values($d));
}

$sql = "INSERT INTO table (" . implode(",", $datafields ) . ") VALUES " . implode(',', $question_marks);

$stmt = $pdo->prepare ($sql);
try {
    $stmt->execute($insert_values);
} catch (PDOException $e){
    echo $e->getMessage();
}
$pdo->commit();

Benim test olmasına rağmen, tek bir değer ile birden fazla ekler ve düzenli hazırlanmış ekler kullanırken 1 sn fark vardı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • John Lynn

    John Lynn

    8 Ocak 2010
  • michaeljacksonVEVO

    michaeljacks

    2 EYLÜL 2009
  • MrRandomSong

    MrRandomSong

    29 Kasım 2009