2013-03-26 23 views
5

Aşağıdaki sorguyu Drupal6'ya yazdım.Aşağıdaki Sorgudaki hata nedir?

$sql = 
    "SELECT registryvalue 
    FROM {muln_registry} 
    WHERE fk_applicationid = %d 
    AND registrykey = '%s'"; 

$result = db_result(db_query($sql, 32, 'SHOW_SCORE_TO_STUDENT')); 

1 değerini döndürmesi gerekiyordu. Ancak hiçbir şey göstermiyor. Eğer mysql editörünü kopyalayıp çalıştırırsam doğru şekilde geri döner.

Ama şimdi boş veriyor. Veritabanı bağlantılarında vb. Hata yok. Diğer sorgular mükemmel çalışıyor.

Buradaki hata ne olabilir? {}

ait

$sql = "SELECT registryvalue FROM muln_registry WHERE fk_applicationid = %d AND registrykey = '%s'"; 
+0

Belki de, değişkenleri doğru şekilde alıp almadığını görmek için sayfanızdaki sorguyu görüntüleyebilirsiniz. – ophintor

+0

Bir dize kalıbı aramaya çalışıyor musunuz? –

+0

@ophintor Değerleri mükemmel şekilde alır. –

cevap

0

Tüm i hatayı görebilirsiniz olduğunu. Örneğin, WHERE column_name LIKE '%searchString', aramaların searchString ile başlamasını bulacaktır.

Daha fazla bilgi için Like'da bulabilirsiniz.

+0

Hayır. Drupal'da buna benzer bir sorguya erişebiliriz. Bu parantezleri kaldırsam bile, çıktı almıyorum. –

+0

@EdwinAlex Aynı sorguyu "{}" ile çalıştırırsanız, phpmyadmin' ile sonuçlanır? Phpmyadmin'de –

+0

, böyle koşamam. {} Kaldırdım ve çalıştırdım. Tam çıkış verir. –

-1

Bir kalıbında aranması için operatör GİBİ denemelisiniz olmalıdır çünkü

+0

Hiçbir desen aramıyorum. Sadece 1 (veya) 0 çıktısını almak istiyorum. Bunun için bir kimlik ve dize –

+0

Ok'u karşılaştırıyorum, özür dilerim. var_dump ($ sonuç) var mı? –

+0

LIKE her zaman gerekli değildir, = –

-2

kullanın:

$sql  = "SELECT registryvalue FROM muln_registry WHERE fk_applicationid = %d AND registrykey = '%s'"; 

yerine

$sql  = "SELECT registryvalue FROM {muln_registry} WHERE fk_applicationid = %d AND registrykey = '%s'"; 

ait {} küme parantezleri kaldırıldı.

+0

bu Drupal 6 için yanlıştır - Drupal tabloyu yeniden yazabilmesi için '{}' kullanmanız GEREKTİRİR Gerekirse önekleri olan adlar. Ayrıca, aşağıdaki yorumları okuduysanız, bu denenmiş ve hata ayıklama için çalışmadı. – hexblot

0

bir

echo '<pre>'; 
var_dump(db_query($sql, 32, 'SHOW_SCORE_TO_STUDENT')); 
echo '</pre>'; 

deneyin Ve sapı olan verileri görmek. Bu, neyin yanlış gittiğine dair daha iyi bir fikir verebilir. Benim önerim PDO'ya geçmek ama bir sistem zaten farklı bir DB mekanizması kullandığında geçerli bir seçenek olmayacağını biliyorum. 'SHOW_SCORE_TO_STUDENT' her zaman aynı ise

+0

ewww sadece drupal 6 bağlantı türüne baktığımda PDO kullanımını öneren eşimden bahsetmediğimi ve mysqli [view source] (http://api.drupal.org/api/drupal) bile kullanmadıklarından emin oldum /includes%21database.mysql.inc/6) – Scottzozer

0

neden olmasın kullanın: Ayrıca

$sql = "SELECT registryvalue FROM {muln_registry} WHERE fk_applicationid = '%d' AND registrykey = 'SHOW_SCORE_TO_STUDENT'"; 

Eğer ikinci parametre ancak ilki etrafında '' olan, bu sorun olabilir emin değilim?

+0

Birincisi tamsayı ve ikincisi varchar türüdür. Ayrıca sorgunuzu kullanırsak, SQL enjeksiyonuna yol açar. Bu savunmasız. –

+0

Bu neden bir SQL enjeksiyonuna yol açabilir? orijinal parametrede olduğu gibi tek parametreyi geçirdiğinizde ve kayıt defteri anahtarının değeri kullanıcı tarafından değiştirilemez mi? – joakaune

+0

Bu ikisi arasında hiçbir fark görmüyorum. SHOW_SCORE_TO_STUDENT sabittir. Yapılandırma ayarlarına göre değiştirilebilir. Yani böyle de geçebilir. –

İlgili konular