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

  • Associated Press

    Associated P

    18 EYLÜL 2006
  • jesiel santos

    jesiel santo

    15 Ocak 2009
  • thelonelyisland

    thelonelyisl

    23 Aralık 2005