我正在尝试从查询结果的第一行中检索特定字段。以下工作正常......
$result = $db->query($query);
$firstrow = $result->fetch();
$desired_field = $firstrow["field"];
我的问题是,如果不将第一行结果存储在变量中,我可以一步完成吗?提前谢谢!
答案 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;