2010-06-24 14 views
10

İpleri PDO ile öğreniyorum.PDO, aynı hazırlanan sorgunun bir parçası olarak konumsal ve adlandırılmış parametreler?

İşte benim sql'm (WHERE'de görünebilen parametre sayısı değişkendir). İşte

SELECT 
     ID, title 

    FROM 
     table 

    WHERE 
     something = ? 

    ORDER BY 
     :sort :dir 

    LIMIT 
     :start, :results 

benim kodudur:

 $query = $conn->prepare($sql); 

     if ($parameters) { 

      $i = 0; 
      foreach ($parameters AS $parameter) { 

       $i++; 
       $query->bindParam($i, $parameter); 

      } 

     } 

     $query->bindParam(':start', $pagination['start'], PDO::PARAM_INT); 
     $query->bindParam(':results', $pagination['results'], PDO::PARAM_INT); 
     $query->bindParam(':sort', $pagination['sort']); 
     $query->bindParam(':dir', $pagination['dir']); 

     $query->execute(); 

... ve işte burada oluşturduğu istisna değildir:

Invalid parameter number: mixed named and positional parameters 

aynı konumsal ve adlandırılmış parametreleri birleştirmek imkansız mı sorgu? Yoksa bir şey mi özlüyorum?

Teşekkürler!

+0

'LIMIT' hakkında emin değilim, ancak' SİPARİŞ BY' parametrelerini kabul etmiyor, en azından benim kullandığım PHP sürümünde (5.2.9) – jeroen

+0

MySQL kabul etmez * alıntılanan değerler * “LİMİT” ve “SİPARİŞ BY” cümleleri için, bu yer tutucular ikame edildiğinde ne olacağıdır. Bu bir PHP problemi değil ... ... ve bir çeşit soru sorar. – Charles

cevap

9

Evet, bu imkansız.

PDO.prepare

Aynı SQL deyimi içinde de adı ve soru işareti parametre işaretçileri kullanamazsınız; birini veya diğer parametre stilini seçin.

+1

Bilgi için teşekkürler. Değişken sayıda parametreye sahip olduğum düşünüldüğünde, değişkenleri ORDER BY ve LIMIT cümlelerine bağlamak imkansız mıdır? (Anladığım kadarıyla, bunu yalnızca adlandırılmış parametrelerle yapabilirsiniz. Ancak, adlandırılmış parametreler bilinmeyen sayıda parametreye sahip olan durumlara kendilerini ödünç vermez.) – Travis

+1

Sütun adlarını bağlayamazsınız, böylece bağlanamazsınız: sort ve : dir. Tüm parametrelere isim verin. – Naktibalda

2

Bir sarıcı işlevini kullanın, naif bir değiştirme işlevi yeterli olacaktır.

$ sort ve $ dir'i doğrudan $ sql sorgusuna karıştırın. Bu ikisi veri değil SQL tanımlayıcılarıdır.

İlgili konular