Как получить только один результат с помощью db_query ()

Я перехожу из «старой школы» PHP MySQL, используя mysql_fetch_array () и т. д., и я пытаюсь быть более Drupally, используя API базы данных в своих модулях.

Я просто хочу вернуть и распечатать значение. Например:

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

Я знаю, что это значение, я могу получить доступ и распечатать его с помощью традиционных методов вне API баз данных.

print $ query-> zip не работает.

Документация API так же прозрачна, как и грязь.

Может ли кто-нибудь сказать мне правильный способ доступа к этим значениям?

Есть ли хороший учебник, который любой мог бы порекомендовать?

28 голосов | спросил blue928 22 FebruaryEurope/MoscowbWed, 22 Feb 2012 12:09:45 +0400000000pmWed, 22 Feb 2012 12:09:45 +040012 2012, 12:09:45

8 ответов


36

Если вы хотите получить только один результат, вы можете использовать fetchField с помощью db_query , чтобы получить результат, например:

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

Вы также можете получить значения, полученные из возвращаемого источника результата запроса, с помощью таких параметров, как fetchObject () , аналогично методам обычного PHP ( mysql_fetch_object )), как использование и получение результатов.

ответил optimusprime619 22 FebruaryEurope/MoscowbWed, 22 Feb 2012 12:27:25 +0400000000pmWed, 22 Feb 2012 12:27:25 +040012 2012, 12:27:25
13

Вот как использовать API базы данных в Drupal 7 без написания запроса MySQL:

  $ query = db_select ('zipcodes', 'z')
  -> поля ('z', array ('zip'))
  -> условие ('z.city', $ city)
  -> диапазон (0, 1)
  - & GT; выполнение ();
$ result = $ query-> fetchObject ();
print $ result-> zip;
 
ответил tyler.frankenstein 24 J000000Friday15 2015, 16:46:56
9

Вы должны зациклировать свой $ query, вы не можете предположить, что у вас есть только один результат с указанным выше запросом.

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

Если вы знаете, что у вас есть только один результат, вы можете вызвать fetchObject в своем запросе ->

  $ query = db_query ("выберите zip из {zipcodes}, где city =: city limit 1", array (": city" => $ city)) -> fetchObject ();
 

print $ query-> zip должен затем предоставить вам то, что вы хотите.

ответил dysrama 22 FebruaryEurope/MoscowbWed, 22 Feb 2012 12:23:42 +0400000000pmWed, 22 Feb 2012 12:23:42 +040012 2012, 12:23:42
3

Я бы сделал

  $ row = (object) db_query ('Ваш SQL здесь') -> fetchAssoc ();
 

, если вы хотите ровно одну строку из набора результатов. В противном случае цикл с использованием foreach является наилучшим вариантом, как было предложено ранее.

ответил Valery Lourie 14 42013vEurope/Moscow11bEurope/MoscowThu, 14 Nov 2013 01:08:52 +0400 2013, 01:08:52
1

Я знаю, что это старо, но вы можете и должны делать:

  $ zip_code = db_select ('zipcodes', 'z')
    -> поля ('z', array (
        «Молния»
    ))
    -> условие ('city', $ city)
    -> диапазон (0, 1)
    - & GT; выполнить ()
    - & GT; fetchField ();
 
ответил Kartagis 21 Maypm17 2017, 22:19:20
0

Хорошо, вам нужно сделать это правильно в Drupa 7:

  1. db_select - в Drupal есть функция, которая возвращает объект, который вы строите с ним SQL-запрос - https://api.drupal.org/api/drupal/includes%21database%21database.inc/function/db_select/7 . У вас есть метод на объекте, называемом диапазоном. вы можете использовать его.

  2. Запрос поля Entity, который является классом, который строит SQL-запрос по запросу: https: //www.drupal.org/node/1343708 . Это также метод диапазона.

ответил Roy Segall 6 AM000000120000002631 2014, 00:25:26
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 ();

, потому что он генерирует предупреждение.

ответил Rizwan Siddiquee 13 J000000Thursday17 2017, 10:41:20
-2

Drupal 6

$ query будет вашим результатом Вам нужно извлечь из него значения, В вашем случае Если он извлекает только 1 строку и 1 столбец i.e zip, то для прямого доступа

  $ zip = db_result (db_query ("ВАШ SQL QUERY"));
 

$ query-> zip не будет работать, поскольку $ query - это результат, не загруженный объект или массив. Так что это должно делать

  while ($ row = db_fetch_object ($ res)) {
  $ row-> zip; //и т.д
}
 

Примечание: db_fetch_array - это еще один API для извлечения значений в формате массива

ответил GoodSp33d 22 FebruaryEurope/MoscowbWed, 22 Feb 2012 12:27:07 +0400000000pmWed, 22 Feb 2012 12:27:07 +040012 2012, 12:27:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132