0

我正在尝试从查询结果的第一行中检索特定字段。以下工作正常...

$result = $db->query($query);

$firstrow = $result->fetch();
$desired_field = $firstrow["field"];

我的问题是,我可以在不将第一行结果存储在变量中的情况下一步完成吗?提前致谢!

4

3 回答 3

0

您可以使用类似$firstrow = $db->query($query)->fetch()的方法,但对于不能保证返回对象的函数,这不是一个好习惯。

query() 函数可以在错误时返回 FALSE,而对 fetch() 的动态调用将是一个致命错误。您不能调用->fetch()标量 FALSE 值。

例如,尝试以下操作,您的脚本将爆炸:

$firstrow = $db->query("SELECT * FROM table_that_does_not_exist")->fetch();

PDO 确实支持抛出异常而不是返回 FALSE 的模式,因此在这种情况下,您可以保证query()->fetch()工作正常,否则 query() 将抛出异常,因此您永远不会遇到致命错误。但是您可能没有使用 PDO 的异常模式。

@GeorgeCummins 的回答指出,fetchColumn()一旦有了 PDOStatement 对象,您就可以使用一种方法,这是获取单列的好方法。如果您只需要一列,将该列命名为选择列表中的唯一列,然后始终使用fetchColumn(0)

$oneValue = $db->query("SELECT oneColumn FROM table")->fetchColumn(0);

否则,如果您使用 fetch(),这将返回一个数组。PHP 5.4 支持数组解引用:

$oneValue = $db->query("SELECT oneColumn FROM table")->fetch()[0];

但如果您使用的是 PHP 5.3 或更早版本,则不支持此功能。而且我从未尝试过使用 PDOStatement 返回的数组,所以如果它实际上返回一个 ArrayObject 或其他东西,这可能无论如何都不起作用。

于 2013-08-09T16:15:16.230 回答
0

您可以使用fetchColumn()从结果集中的下一行返回单列。如果结果集中只有一列,请执行以下操作:

$desired_field = $result->fetchColumn();

如果结果集中有多列,请指定所需列的数字索引:

$desired_field = $result->fetchColumn(1);

注意fetchColumn()文档中提供的警告:

如果您使用 PDOStatement::fetchColumn() 检索数据,则无法从同一行返回另一列。

于 2013-08-09T16:13:23.453 回答
-1

当且仅当您的查询正确并且至少有一个行数据时,这保证工作。

$db->query($query)->fetch(PDO::FETCH_OBJ)->field;
于 2013-08-09T16:36:27.680 回答