如何使用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文档非常清晰。

有人可以告诉我访问这些值的正确方法吗?

有没有人可以推荐的好教程?

Answers:


38

如果只希望获取一个结果,则可以使用fetchFielddb_query来获取结果,例如:

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

您还可以使用fetchObject()之类的选项来获取从查询的返回结果源中检索到的值,这些选项类似于传统的PHP(mysql_fetch_object)编码方法,例如using和get结果。


1
对下降投票的一些建设性批评将非常有用
optimusprime619

您描述的功能或方法在Drupal 7中均不可用。您的示例将产生致命错误。另外,您似乎混合使用了Drupal 6和Drupal 7代码,因此
Clive

2
@Clive哎呀。。。。。。。。。。。
optimusprime619 '02

1
不用担心,如果您能解决问题,我会很乐意删除不赞成投票的人
克莱夫(Clive)

1
@Clive现在做到了... :)
optimusprime619

15

以下是在Drupal 7中使用数据库API而不编写MySQL查询的方法:

$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,不能假设上述给定查询只有一个结果。

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

如果知道只有一个结果,则可以在查询中调用fetchObject->

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

print $ query-> zip应该会给你想要的东西。


4
注意:您应该使用db_query_range()而不是对限制进行硬编码。
Berdir


2

我知道这已经很老了,但是您可以并且应该这样做:

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


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及更早版本。
jenlampton 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.