Db_query () kullanarak tek bir sonucu nasıl alırım


28

'Eski okul' PHP MySQL kullanma mysql_fetch_array(), vb. Yöntemlerinden geçiş yapıyorum ve modüllerimde Veritabanı API'sini kullanarak daha Drupally olmaya çalışıyorum.

Sadece bir değeri iade edip yazdırmak istiyorum. Örneğin:

$query = db_query("SELECT zip FROM {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city));

Değerin orada olduğunu biliyorum, veritabanı API'si dışındaki geleneksel yöntemleri kullanarak erişebilir ve yazdırabilirim.

print $query->zip çalışmıyor.

API dokümantasyonu çamur kadar açıktır.

Birisi bana bu değerlere ulaşmanın doğru yolunu söyleyebilir mi?

Kimsenin önerebileceği iyi bir eğitim var mı?

Yanıtlar:


38

Yalnızca bir sonuç almak isterseniz , sonucu almak için fetchField ile kullanabilirsiniz db_query, örneğin:

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city))->fetchField();

Ayrıca, sorgunun döndürülen sonuç kaynağından elde edilen değerleri fetchObject () gibi geleneksel PHP ( mysql_fetch_object) kodlama yöntemlerine benzer seçenekleri kullanarak ve elde edilen sonuçları kullanarak da alabilirsiniz.


1
Olumsuz oy hakkında bazı yapıcı eleştiriler oldukça yararlı olacaktır
optimusprime619

Tanımladığınız işlevlerin veya yöntemlerin hiçbiri Drupal 7'de mevcut değildir. Örneğiniz ölümcül bir hata üretecektir. Ayrıca Drupal 6 ve Drupal 7 kodunu karıştırıyor gibi görünüyorsunuz, bu nedenle aşağı oy
Clive

2
@Clive ayyır .... kan acele ... nedenini bilmek iyi ... teşekkürler!
optimusprime619

1
Endişeye gerek yok, cevabını düzeltirseniz memnuniyetle aşağıyı kaldıracağım
Clive

1
@Clive şimdi yapti ... :)
optimusprime619

15

İşte MySQL sorgusu yazmadan Drupal 7'deki Veritabanı API'sini nasıl kullanacağınız:

$query = db_select('zipcodes', 'z')
  ->fields('z', array('zip'))
  ->condition('z.city', $city)
  ->range(0, 1)
  ->execute();
$result = $query->fetchObject();
print $result->zip;

9

$ Sorgunuzu döngülendirmelisiniz, yukarıda verilen sorguyla yalnızca bir sonucunuz olduğunu düşünemezsiniz.

foreach ($query as $row) {
  print $row->zip;
}

Yalnızca bir sonucunuz olduğunu biliyorsanız, sorgunuzda fetchObject'i çağırabilirsiniz ->

$query = db_query("select zip from {zipcodes} where city = :city limit 1", array(":city" => $city))->fetchObject();

yazdır $ query-> zip sonra size ne istediğinizi vermelidir.


4
Not: Bir sınırlama yapmak yerine, bir db_query_range () kullanmalısınız.
Berdir

3

yapardım

$row = (object)db_query('Your SQL here')->fetchAssoc();

Sonuç kümesinden tam bir satır istiyorsanız. Aksi halde, foreach ile döngü, daha önce önerildiği gibi en iyi seçenektir.


2

Bunun eski olduğunu biliyorum ama yapabilecekleriniz ve yapmanız gerekenler:

$zip_code = db_select('zipcodes', 'z')
    ->fields('z', array(
        'zip'
    ))
    ->condition('city', $city)
    ->range(0, 1)
    ->execute()
    ->fetchField();

0

Bunu Drupa 7'de doğru şekilde yapmanın yollarını bulmalısınız:

  1. db_select - Drupal'da, SQL sorgusunu oluşturduğunuz bir nesneyi döndüren bir işlev vardır - https://api.drupal.org/api/drupal/includes%21database%21database.inc/function/db_select/7 . Range adlı nesnede bir yöntem var. kullanabilirsiniz.

  2. Üzerine bir SQL sorgusu oluşturan bir sınıf olan varlık alanı sorgusu, şunları içerir: https://www.drupal.org/node/1343708 . Bu da range metoduna sahiptir.


0

Drupal 7

Tekli Sonuç İçin Bu Sorguyu Kullan:

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city", array(":city" => $city))->fetchField();

Bunu kullanmak yerine

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city))->fetchField();

çünkü onun oluşturduğu uyarı.


-2

Drupal 6

$query sonucun olacak. Ondan değer almalısın, Senin durumunda Sadece 1 satır ve 1 sütun yani zip alırsa doğrudan almak için

$zip = db_result(db_query("YOUR SQL QUERY"));

$query->zip$ query olarak çalışmayacak sonuç yüklü bir nesne veya bir dizi değil sonuç kümesidir. Yani bu yapmalı

while($row = db_fetch_object($res)){
  $row->zip ; // etc
}

Not: Dizi biçimindeki değerleri almak db_fetch_arrayiçin başka bir API'dir


1
db_result db_fetch_array ve db_fetch_object, Drupal 6 ve önceki sürümler içindir.
jenlampton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.