Jak uzyskać tylko jeden wynik za pomocą db_query ()


28

mysql_fetch_array()Przechodzę ze „starej szkoły” metod PHP MySQL itp. I staram się być bardziej Drupally, używając API bazy danych w moich modułach.

Chcę po prostu zwrócić i wydrukować wartość. Na przykład:

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

Wiem, że wartość tam jest, mogę uzyskać do niej dostęp i wydrukować ją przy użyciu tradycyjnych metod poza interfejsem API bazy danych.

print $query->zip nie działa.

Dokumentacja API jest tak przejrzysta jak błoto.

Czy ktoś może mi powiedzieć, w jaki sposób uzyskać dostęp do tych wartości?

Czy jest też dobry samouczek, który ktoś mógłby polecić?

Odpowiedzi:


38

Jeśli chcesz pobrać tylko jeden wynik można użyć fetchField z db_queryprzynieść wynik, na przykład:

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

Możesz również pobrać wartości pobrane ze źródła wyników zapytania, używając opcji takich jak fetchObject () podobnych do metod tradycyjnego mysql_fetch_objectkodowania PHP ( ), takich jak używanie i uzyskiwanie wyników.


1
użyteczne byłoby trochę konstruktywnej krytyki opinii negatywnej
optimusprime619

Żadna z opisanych tu funkcji ani metod nie jest dostępna w Drupal 7. Twój przykład spowoduje błąd krytyczny. Wygląda na to, że miksujesz kod Drupala 6 i Drupala 7, stąd głosowanie w dół
Clive

2
@Clive oops .... przypływ krwi ... dobrze znać powód ... dzięki!
optimusprime619

1
Nie martw się, jeśli naprawisz odpowiedź, chętnie usunę głos negatywny
Clive

1
@Clive zrobił to teraz ... :)
optimusprime619

15

Oto jak korzystać z interfejsu API bazy danych w Drupal 7 bez pisania zapytania MySQL:

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

9

Musisz zapętlić swoje zapytanie $, nie możesz przypuszczać, że masz tylko jeden wynik dla powyższego zapytania.

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

Jeśli wiesz, że masz tylko jeden wynik, możesz wywołać fetchObject w swoim zapytaniu ->

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

print $ query-> zip powinien dać ci to, czego chcesz.


4
Uwaga: Zamiast sztywno kodować limit, powinieneś użyć db_query_range ().
Berdir

3

chciałbym zrobić

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

jeśli chcesz dokładnie jeden wiersz z zestawu wyników. W przeciwnym razie, jak sugerowano wcześniej, najlepszym rozwiązaniem jest zapętlenie z foreach.


2

Wiem, że to stare, ale możesz i powinieneś zrobić:

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


0

Drupal 7

Użyj tego zapytania do pojedynczego wyniku:

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

Zamiast tego używać

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

ponieważ generuje ostrzeżenie.


-2

Drupal 6

$query będzie twój wynik Musisz pobrać z niego wartości, W twoim przypadku Jeśli pobierze tylko 1 wiersz i 1 kolumnę, tj. zip, to uzyskaj bezpośrednio

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

$query->zipnie będzie działać, ponieważ $ zapytanie jest zestawem wyników, a nie załadowanym obiektem lub tablicą. To powinno wystarczyć

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

Uwaga: db_fetch_arrayjest innym API do pobierania wartości w formacie tablicowym


1
db_result db_fetch_array i db_fetch_object są dla Drupal 6 i wcześniejszych.
jenlampton
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.