SORU
28 Mayıs 2009, PERŞEMBE


Ben bir dizi bind() koşul?

Mümkünse tutucu kullanarak bir PDO değerler dizisi bağlamak olduğunu merak ediyorum. Kullanın diye burada IN() bir durum ile kullanmak için bir değer dizisi geçirmeye çalışıyor.
Anlatma konusunda pek iyi değilim, buraya göstermek için bazı psuedocode. Böyle bir şey yapmak mümkün olmak istiyorum

<?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>

Ve PDO bağlama ve dizideki tüm değerleri belirtiniz.

Şu an yapıyorum:

<?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
    $val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute();
?>

Hangi kesinlikle iş yapar, ama sadece eğer kaçırıyorum yerleşik bir çözümü var mı diye soracaktım?

CEVAP
28 Mayıs 2009, PERŞEMBE


soulmerge doğru olduğunu düşünüyorum. sorgu dizesi inşa etmek zorundasınız.

<?php
$ids     = array(1, 2, 3, 7, 8, 9);
$inQuery = implode(',', array_fill(0, count($ids), '?'));

$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(' . $inQuery . ')'
);

// bindvalue is 1-indexed, so $k 1
foreach ($ids as $k => $id)
    $stmt->bindValue(($k 1), $id);

$stmt->execute();
?>

düzeltme:dan, sen haklıydın. sabit kod (gerçi test etmedim)

düzenleme:(yorum) hem chris ve somebodyisintrouble bu döngü dosyalarda grup olduğunu söylemişti

(...)
// bindvalue is 1-indexed, so $k 1
foreach ($ids as $k => $id)
    $stmt->bindValue(($k 1), $id);

$stmt->execute();

... gereksiz olabilir, foreach döngü $stmt->execute sadece yerini olabilir

<?php 
  (...)
  $stmt->execute($ids);
?>

(tekrar test) bilmiyordum

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NightShader1

    NightShader1

    25 Temmuz 2006
  • Snazzy Labs

    Snazzy Labs

    9 Aralık 2008
  • tinycammonitor

    tinycammonit

    14 Aralık 2010