Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql PDO:在查询中获取带有“动态”字段的行_Php_Mysql_Pdo_Row_Fetch - Fatal编程技术网

Php Mysql PDO:在查询中获取带有“动态”字段的行

Php Mysql PDO:在查询中获取带有“动态”字段的行,php,mysql,pdo,row,fetch,Php,Mysql,Pdo,Row,Fetch,我有一个带有动态字段的查询,如何在不知道其名称的情况下访问此字段 define('FIELD_NAME',"name"); $stmt = $connexion->query('SELECT '.FIELD_NAME.' from mytable); while ($rs=$stmt->fetch(PDO::FETCH_OBJ)){ echo $rs->FIELD_NAME; // DOESN'T WORK echo $rs->name;

我有一个带有动态字段的查询,如何在不知道其名称的情况下访问此字段

define('FIELD_NAME',"name");
$stmt = $connexion->query('SELECT '.FIELD_NAME.' from mytable);   

while ($rs=$stmt->fetch(PDO::FETCH_OBJ)){
    echo $rs->FIELD_NAME;   // DOESN'T WORK
    echo $rs->name;         // WORK
}
将常量包装在{}中以创建动态变量

echo $rs->{FIELD_NAME};
您可以从中看到一些示例

也可以使用大括号来清楚地分隔属性名称

演示:


使用这种方法,如果FIELD_NAME被定义为*,您仍然可以获取第一列。

如果您只想从每一行获取一个值,您可以使用


还要注意的是,您缺少了一个“.

有很多方法可以做到这一点。如果变量名与列名称匹配并不重要,则可以在SELECT语句中为表达式指定别名

例如:

 SELECT whateverexpression AS mycol FROM mytable LIMIT 1;
然后,您就知道对象中变量的名称是$mycl

我认为这种方法在更一般的情况下可能是好的,当您处理的表的列名是由梅毒白痴开发人员分配的,他们有很好的理由这样做

CREATE TABLE t (`Hey!$I (can)^name.\my->column Wh@tever` INT);
INSERT INTO t VALUES (42);
SELECT `Hey!$I (can)^name.\my->column Wh@tever` FROM t;
显然,还有很多其他方法,比如避免PDO::FETCH_OBJ,而是使用PDO::FETCH_NUM。如果您想坚持使用PDO::FETCH_OBJ,我认为分配一个别名是可行的


从ReultSet中检索元数据是一种方法,如果GETCalnMeta不是实验性的,我会考虑。

在查询结束时有一个键入。你忘了最后的报价。添加错误检查会向您展示这一点。不要使用::FETCH_OBJ,而是使用FETCH a并只获取第一个条目。OP为什么要尝试此操作?请解释一下你做了什么,以及你为什么这样做,不仅是为了OP,也是为了SO的未来访客。只是注意到mario已经在评论中提出了这一点。我不知道梅毒导致程序员创建这样的专栏,但我真的很惊讶这是一个有效的列名haha@Mike:对该列的引用必须用反勾号括起来。我不知道PDO::FETCH_OBJ对resultset中的列名做了什么,成员变量的名称是什么。接受挑战!objectstdClass4 1{[Hey!$I can^name.\my->columnWh@tever]=>int1}因此您可以使用$result->{'Hey!$I can^name.\my->column访问它Wh@tever'};. 恶心@迈克。很好,做得很好。现在我很想在我的下一个专栏名中加上一句恶毒的引语嘿嘿。。。咳,咳,咳,咳。
 SELECT whateverexpression AS mycol FROM mytable LIMIT 1;
    echo $rs->mycol;
CREATE TABLE t (`Hey!$I (can)^name.\my->column Wh@tever` INT);
INSERT INTO t VALUES (42);
SELECT `Hey!$I (can)^name.\my->column Wh@tever` FROM t;