SORU
19 EKİM 2009, PAZARTESİ


PDO deyimi MySQL için bağlayıcı değerler

Gerçekten oldukça uzun bir süre rahatsız olmasına sonra bir cevap almak istiyorum PDO ile bir sorunu var.

Bu örnek alın:

KİMLİĞİ bir dizi açıklamada bir MySQL kullanmak için PDO deyimi bağlama duyuyorum.

Dizi söyle olabilir:değerler = dizi(1,2,3,4,5,6,7,8)$;

Veritabanı güvenli değişken olur$ürünler = implode(',' $değer);

Yaniürünler . $ o zaman bir olurduSTRİNGdeğeri:'1,2,3,4,5,6,7,8'

Deyim gibi görünecektir:

SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (:products)

Elbetteürünler . $ deyim olarak bağlı olacaktır:ürünler.

Deyim derlenmiş ve değerlerine bağlı, ancak, aslında, bu gibi görünecektir:

SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN ('1,2,3,4,5,6,7,8')

Sorun içindeki her şeyi açıklamaya bağlamak için virgülle ayrılmış değerler olarak hazırladığım verilen tek bir dize deyimi yürütme.

Asıl istediğim şey

SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (1,2,3,4,5,6,7,8)

Aslında bunun tek yolu onları bağlayıcı olmadan dizesindeki değerleri kendisi yerleştirerek, ancak kesin olarak biliyorum, bunu yapmanın daha kolay bir yolu olmalı.

Tamamen işareti burada eksik olmalı cevap ne gördüğümde kendim tekmeleyeceğim biliyorum!

Şimdiden teşekkürler.

CEVAP
19 EKİM 2009, PAZARTESİ


Bu soru soruldu aynı şeydir: http://stackoverflow.com/questions/920353/php-pdo-can-i-bind-an-array-to-an-in-condition

Cevap orada, bir değişken in yan boy listesi için sorgu kendiniz inşa etmek gerekir.

Ancakkullanabilirsiniz dedi, virgülle ayrılmış bir liste kullanarak find_in_set ama, büyük veri setleri, bu olurdu büyük performans etkisi, o zamandan beri her değeri tablo olmalı döküm bir char türü.

Örneğin:

select users.id
from users
join products
on products.user_id = users.id
where find_in_set(cast(products.id as char), :products)

Ya da, üçüncü bir seçenek olarakbir kullanıcı oluşturabilirsiniz sizin için virgülle ayrılmış listesi böler tanımlı fonksiyon (cf. http://www.slickdev.com/2008/09/15/mysql-query-real-values-from-delimiter-separated-string-ids/). Bu özellikle eğer in(...) yan güveniyor çok fazla sorgu varsa muhtemelen üç en iyi seçenektir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • LinusTechTips

    LinusTechTip

    25 Kasım 2008
  • Living Waters

    Living Water

    9 AĞUSTOS 2006