Mysql PDO:获取查询中包含 "dynamic" 字段的行
Mysql PDO : get row with "dynamic" fields in query
我有一个包含动态字段的查询,如何在不知道其名称的情况下访问该字段?
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};
你可以从the documentation中看到一些例子。
Curly braces may also be used, to clearly delimit the property name.
define('FIELD_NAME',"name");
$stmt = $connexion->query('SELECT '.FIELD_NAME.' from mytable');
while ($rs=$stmt->fetch(PDO::FETCH_NUM)){
echo $rs[0];
}
使用这种方法,如果 FIELD_NAME 被定义为 * 之类的东西,您仍然可以获得第一列。
如果您只想从每一行中获取一个值,您可以使用 PDOStatement::fetchColumn()
define('FIELD_NAME',"name");
$stmt = $connexion->query('SELECT '.FIELD_NAME.' from mytable');
while ($col = $stmt->fetchColumn()) {
echo $col;
}
另请注意,您缺少 '
。
有很多方法可以解决这个问题。如果变量名与 column_name 匹配并不重要,您可以为 SELECT
语句
中的表达式分配一个别名
例如:
SELECT whateverexpression AS mycol FROM mytable LIMIT 1;
然后,您 "know" 对象中变量的名称是 $mycol
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;
显然,还有许多其他方法,例如避免使用 PDO::FETCH_OBJ
并改用 PDO::FETCH_NUM
。如果您想坚持使用 PDO::FETCH_OBJ
,我认为分配别名是可行的。
如果 getColumnMeta
还不是实验性的,我会考虑从结果集中检索元数据的方法。
我有一个包含动态字段的查询,如何在不知道其名称的情况下访问该字段?
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};
你可以从the documentation中看到一些例子。
Curly braces may also be used, to clearly delimit the property name.
define('FIELD_NAME',"name");
$stmt = $connexion->query('SELECT '.FIELD_NAME.' from mytable');
while ($rs=$stmt->fetch(PDO::FETCH_NUM)){
echo $rs[0];
}
使用这种方法,如果 FIELD_NAME 被定义为 * 之类的东西,您仍然可以获得第一列。
如果您只想从每一行中获取一个值,您可以使用 PDOStatement::fetchColumn()
define('FIELD_NAME',"name");
$stmt = $connexion->query('SELECT '.FIELD_NAME.' from mytable');
while ($col = $stmt->fetchColumn()) {
echo $col;
}
另请注意,您缺少 '
。
有很多方法可以解决这个问题。如果变量名与 column_name 匹配并不重要,您可以为 SELECT
语句
例如:
SELECT whateverexpression AS mycol FROM mytable LIMIT 1;
然后,您 "know" 对象中变量的名称是 $mycol
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;
显然,还有许多其他方法,例如避免使用 PDO::FETCH_OBJ
并改用 PDO::FETCH_NUM
。如果您想坚持使用 PDO::FETCH_OBJ
,我认为分配别名是可行的。
如果 getColumnMeta
还不是实验性的,我会考虑从结果集中检索元数据的方法。