web-dev-qa-db-ja.com

db_query()を使用して1つの結果のみを取得する方法

私は「古い学校」から移行していますPHP MySQLのmysql_fetch_array()を使用するメソッドなどです。モジュールでデータベースAPIを使用することで、よりDrupallyにしようとしています。

単に値を返して出力したいだけです。例えば:

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

価値があることはわかっています。データベースAPIの外部で従来の方法を使用してアクセスし、印刷できます。

print $query->Zip 動かない。

APIドキュメントは、泥と同じくらい明確です。

誰かがこれらの値にアクセスする正しい方法を教えてもらえますか?

誰もがお勧めできる良いチュートリアルはありますか?

27
blue928

結果を1つだけフェッチしたい場合は、 fetchFielddb_queryとともに使用して、結果をフェッチできます。例:

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

また、従来のPHP(mysql_fetch_object)コーディングのメソッドと同様の fetchObject() などのオプションを使用して、クエリの返された結果ソースから取得した値をフェッチすることもできます。結果を使用して取得します。

39
optimusprime619

MySQLクエリを記述せずにDrupal 7でDatabase APIを使用する方法は次のとおりです。

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

$ queryをループする必要があります。上記のクエリで1つの結果しか得られないとは限りません。

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

結果が1つしかないことがわかっている場合は、クエリでfetchObjectを呼び出すことができます->

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

print $ query-> Zipを実行すると、必要なものが得られます。

9
dysrama

私はするだろう

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

結果セットから正確に1行が必要な場合。それ以外の場合は、前に提案したように、foreachでループするのが最良のオプションです。

3
Valery Lourie

私はこれが古いことを知っていますが、できるし、すべきです:

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

Drupa 7でこれを適切に行う方法が必要です。

  1. db_select-in Drupal彼と一緒に構築したオブジェクトをSQLクエリで返す関数があります- https://api.drupal.org/api/drupal/includes% 21database%21database.inc/function/db_select/7 。rangeというオブジェクトにメソッドがあり、それを使用できます。

  2. エンティティに対してSQLクエリを作成するクラスであるエンティティフィールドクエリ: https://www.drupal.org/node/1343708 。これにはrangeメソッドもあります。

0
Roy Segall

Drupal 7

このクエリを単一の結果に使用:

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

これを使う代わりに

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

警告を生成するためです。

0