PHP PDO查询:从第一行获取字段

时间:2013-08-09 16:07:02

标签: php mysql pdo

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

$desired_field = $result->fetchColumn();

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

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

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

  

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

答案 1 :(得分:0)

您可以使用类似$firstrow = $db->query($query)->fetch()之类的内容,但这不适合使用无法保证返回对象的函数。

query()函数可以在出错时返回FALSE,并且对fetch()的动态调用将是致命错误。您无法在标量FALSE值上调用->fetch()

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

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

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

来自@GeorgeCummins的回答指出,一旦有了一个PDOStatement对象,就可以使用fetchColumn()方法,这是获得单个列的好方法。如果您只需要一列,请将该列命名为选择列表中的 only 列,然后始终使用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,或者这可能无论如何都不行。

答案 2 :(得分:-1)

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

$db->query($query)->fetch(PDO::FETCH_OBJ)->field;