web-dev-qa-db-fra.com

Comment obtenir un seul résultat en utilisant db_query ()

Je passe de la "vieille école" PHP Méthodes MySQL d'utilisation de mysql_fetch_array(), etc. et j'essaie d'être plus drupement en utilisant l'API de base de données dans mes modules.

Je veux simplement retourner et imprimer une valeur. Par exemple:

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

Je sais que la valeur est là, je peux y accéder et l'imprimer en utilisant des méthodes traditionnelles en dehors de l'API de base de données.

print $query->Zip ne fonctionne pas.

La documentation de l'API est aussi claire que de la boue.

Quelqu'un peut-il me dire comment accéder correctement à ces valeurs?

Y a-t-il un bon tutoriel que n'importe qui pourrait également recommander?

27
blue928

Si vous souhaitez récupérer un seul résultat, vous pouvez utiliser fetchField avec db_query pour récupérer le résultat, par exemple:

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

Vous pouvez également extraire les valeurs extraites de la source de résultats renvoyée par la requête en utilisant des options telles que fetchObject () similaires aux méthodes classiques PHP (mysql_fetch_object) coder comme utiliser et obtenir des résultats.

39
optimusprime619

Voici comment utiliser l'API de base de données dans Drupal 7 sans écrire de requête MySQL:

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

Vous devez boucler votre requête $, vous ne pouvez pas supposer que vous n'avez qu'un seul résultat avec la requête donnée ci-dessus.

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

Si vous savez que vous n'avez qu'un seul résultat, vous pouvez appeler fetchObject sur votre requête ->

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

print $ query-> Zip devrait alors vous donner ce que vous voulez.

9
dysrama

Je ferais

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

si vous voulez exactement une ligne de l'ensemble de résultats. Sinon, boucler avec foreach est la meilleure option, comme suggéré précédemment.

3
Valery Lourie

Je sais que c'est vieux, mais vous pouvez et devez faire:

$Zip_code = db_select('zipcodes', 'z')
    ->fields('z', array(
        'Zip'
    ))
    ->condition('city', $city)
    ->range(0, 1)
    ->execute()
    ->fetchField();
2
Kartagis

Eh bien, vous devez trouver des moyens de le faire correctement dans Drupa 7:

  1. db_select - in Drupal il y a une fonction qui retourne un objet que vous construisez avec lui la requête SQL - https://api.drupal.org/api/drupal/includes% 21database% 21database.inc/function/db_select/7 . Vous avez une méthode sur l'objet appelé range. Vous pouvez l'utiliser.

  2. Requête de champ d'entité qui est une classe qui construit une requête SQL sur des entites: https://www.drupal.org/node/1343708 . C'est aussi avoir la méthode range.

0
Roy Segall

Drupal 7

Utilisez cette requête pour un résultat unique:

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

Au lieu d'utiliser cela

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

parce que cela génère un avertissement.

0
Rizwan Siddiquee