db_query ()를 사용하여 하나의 결과 만 얻는 방법


28

mysql_fetch_array(), 등 을 사용하는 '오래된 학교'PHP MySQL 방법에서 전환 중이며 모듈에서 데이터베이스 API를 사용하여 Drupally를 더 많이 사용하려고합니다.

단순히 값을 반환하고 인쇄하고 싶습니다. 예를 들면 다음과 같습니다.

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

나는 가치가 있다는 것을 알고 데이터베이스 API 외부의 전통적인 메소드를 사용하여 액세스하고 인쇄 할 수 있습니다.

print $query->zip 작동하지 않습니다.

API 문서는 진흙처럼 분명합니다.

누군가이 값에 액세스하는 올바른 방법을 말해 줄 수 있습니까?

누구나 추천 할 수있는 좋은 튜토리얼이 있습니까?

답변:


38

하나의 결과 만 가져 오려면 fetchField 를 사용 db_query하여 결과를 가져올 수 있습니다. 예를 들면 다음과 같습니다.

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

또한 사용 및 결과 얻기와 같은 일반적인 PHP ( ) 코딩 방법과 유사한 fetchObject () 와 같은 옵션을 사용하여 쿼리의 반환 된 결과 소스에서 검색된 값을 가져올 수 있습니다 mysql_fetch_object.


1
downvote에 대한 건설적인 비판은 다소 유용 할 것입니다
optimusprime619

Drupal 7에서 설명하는 기능이나 방법을 사용할 수 없습니다.이 예에서는 치명적인 오류가 발생합니다. 또한 Drupal 6과 Drupal 7 코드를 혼합 한 것 같습니다. 따라서 다운 투표
Clive

2
@Clive oops .... blood rush ... 이유를 알고 반가워요. 감사합니다!
optimusprime619

1
걱정하지 마십시오. 답변을 고치면 기꺼이 downvote
Clive를

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

$ 쿼리를 반복해야하며 위의 쿼리에 대해 하나의 결과 만 있다고 가정 할 수는 없습니다.

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

결과가 하나만 있다는 것을 알면 쿼리에서 fetchObject를 호출 할 수 있습니다->

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

$ query-> zip을 인쇄하면 원하는 것을 얻을 수 있습니다.


4
참고 : 한계를 하드 코딩하는 대신 db_query_range ()를 사용해야합니다.
Berdir

3

난 그럴거야

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

결과 세트에서 정확히 하나의 행을 원할 경우. 그렇지 않으면 이전에 제안한 것처럼 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. 클래스입니다 엔티티 필드 쿼리 구조 entites시 SQL 쿼리가 : https://www.drupal.org/node/1343708를 . 이것은 또한 범위 방법이 있습니다.


0

드루팔 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

드루팔 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 이하를위한 것입니다.
jenlampton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.