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


28

私は「古い学校」の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ドキュメントは泥と同じくらい明確です。

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

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

回答:


38

1つの結果のみを取得する場合は、fetchField with db_queryを使用して結果を取得できます。例:

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

また、のようなオプション使用してクエリの返される結果のソースから取得した値フェッチ可能性はfetchObjectを() (従来のPHPの方法と同様にmysql_fetch_object)を使用してのようにコーディングし、結果を取得します。


1
downvoteにいくつかの建設的な批判は、むしろ有用であろう
optimusprime619

Drupal 7では、説明する関数やメソッドは使用できません。この例では致命的なエラーが発生します。また、あなたは、したがってダウンの投票、Drupalの6とDrupalの7のコードを混合しているように見える
クライヴ

2
@Cliveおっと...ブラッドラッシュ...理由を知って良い..ありがとう!
optimusprime619

1
心配する必要はありません。答えを修正したら、喜んで下票を削除します
クライブ

1
@Cliveは今やった... :)
optimusprime619

15

MySQLクエリを作成せずにDrupal 7でデータベースAPIを使用する方法は次のとおりです。

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

9

$ 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が必要なものを提供します。


4
注:制限をハードコーディングする代わりに、db_query_range()を使用する必要があります。
ベルディール

3

私はやります

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

結果セットから1行だけが必要な場合。それ以外の場合は、前述のとおり、foreachを使用したループが最適なオプションです。


2

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

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

0

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

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

  2. エンティティフィールドクエリ。エンティティ:https ://www.drupal.org/node/1343708でSQLクエリを構築するクラスです。これには範囲メソッドもあります。


0

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();

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


-2

Drupal 6

$query あなたの結果になりますあなたはそれから値を取得する必要があります、あなたの場合はそれが1行と1列のみを取得する場合はzip

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

$query->zip$ queryはロードされたオブジェクトまたは配列ではない結果セットであるため、機能しません。だからこれはすべき

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

注:値を配列形式で取得するdb_fetch_array別のAPIです


1
db_result db_fetch_arrayおよびdb_fetch_objectは、Drupal 6以前用です。
ジェンランプトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.