Come posso ottenere solo un risultato usando db_query ()


28

Sto passando dai metodi MySQL PHP "old school" di utilizzo mysql_fetch_array(), ecc. E sto cercando di essere più Drupally usando l'API Database nei miei moduli.

Voglio semplicemente restituire e stampare un valore. Per esempio:

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

So che il valore è lì, posso accedervi e stamparlo usando metodi tradizionali al di fuori dell'API del database.

print $query->zip non funziona.

La documentazione dell'API è chiara come il fango.

Qualcuno può dirmi il modo corretto di accedere a questi valori?

C'è un buon tutorial che qualcuno potrebbe consigliare pure?

Risposte:


38

Se desideri recuperare solo un risultato, puoi utilizzare fetchField con db_queryper recuperare il risultato, ad esempio:

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

È inoltre possibile recuperare i valori recuperati dall'origine dei risultati restituiti della query utilizzando opzioni come fetchObject () simili ai metodi di mysql_fetch_objectcodifica PHP ( ) convenzionali come l'utilizzo e ottenere risultati.


1
alcune critiche costruttive sul downvote sarebbero piuttosto utili
optimusprime619

Nessuna delle funzioni o metodi che descrivi sono disponibili in Drupal 7. Il tuo esempio produrrà un errore fatale. Inoltre sembra che tu stia mescolando il codice Drupal 6 e Drupal 7, quindi il voto
negativo

2
@Clive oops .... corsa al sangue ... bello sapere il motivo però ... grazie!
optimusprime619,

1
Non preoccuparti, se risolvi la risposta rimuoverò volentieri il downvote
Clive

1
@Clive l'ho fatto ora ... :)
optimusprime619,

15

Ecco come utilizzare l'API Database in Drupal 7 senza scrivere una query 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

Devi eseguire il ciclo della tua query $, non puoi supporre di avere un solo risultato con la query sopra indicata.

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

Se sai di avere un solo risultato, puoi chiamare fetchObject sulla tua query ->

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

print $ query-> zip dovrebbe quindi darti quello che vuoi.


4
Nota: anziché codificare un limite, è necessario utilizzare db_query_range ().
Berdir,

3

farei

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

se si desidera esattamente una riga dal set di risultati. Altrimenti il ​​looping con foreach è l'opzione migliore, come suggerito prima.


2

So che questo è vecchio, ma puoi e dovresti fare:

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


0

Drupal 7

Usa questa query per singolo risultato:

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

Invece di usare questo

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

perché genera un avvertimento.


-2

Drupal 6

$query sarà il tuo risultato Devi recuperare i valori da esso, Nel tuo caso Se recupera solo 1 riga e 1 colonna cioè zip allora per ottenere direttamente

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

$query->zipnon funzionerà poiché $ query viene impostato non un oggetto caricato o un array. Quindi questo dovrebbe fare

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

Nota: db_fetch_arrayè un'altra API per recuperare valori in formato array


1
db_result db_fetch_array e db_fetch_object sono per Drupal 6 e precedenti.
Jenlampton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.