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?
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.
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;
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.
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.
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();
Eh bien, vous devez trouver des moyens de le faire correctement dans Drupa 7:
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.
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.
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.