2011-03-18 22 views
11

我有像'operation.date','operation.name'等collumns的mysql表。 将该表数据作为对象提取后与$mysqli->fetch_object()我得到这个(print_r of row):名称中带点的php对象属性

stdClass Object 
(
[id] => 2 
[operation.date] => 2010-12-15 
[operation.name] => some_name 
) 

我怎么存取权限operation.dateoperation.name和所有其他古怪的命名对象的属性?

+3

这是一个重复的对象。答案是,这不是一个有效的财产。你应该改变它。但是你可以使用'$ obj - > {'operation.date'}'来访问它。 – Gordon 2011-03-18 11:07:34

+0

可能重复的[对象的键中的连字符](http://stackoverflow.com/questions/2925044/hyphens-in-keys-of-object)以及[如何访问此对象属性](http:// stackoverflow.com/questions/758449/php-how-do-i-access-this-object-property) – Gordon 2011-03-18 11:14:08

+0

对不起。正在搜索,但不是连字符。 – egis 2011-03-18 11:25:26

回答

31

指定您的SQL查询的别名一样SELECT column AS nameWithoutDots ...
$object->{'operation.name'}
访问这些属性或者把对象数组像这样:$obj = (array)$obj; echo $obj['operation.name']

+1

+1换成引号,以告诉OP如何治愈原因而不是症状 – Gordon 2011-03-18 11:15:45

+1

我知道别名,但写入里程很费力查询所有列作为别名:)因为你的答案是最丰富的,我会接受它;)感谢所有的答案。 – egis 2011-03-18 11:24:27

3

要访问你需要花括号来包装他们这些属性:

echo $object->{"operation.date"} //2010-12-15

如果设置一个属性这样有问题的符号被去除,从而允许您访问属性为echo $object->operationdate //2010-12-15

+9

+1,但'operation.date'需要用引号括起来,我想。 – 2011-03-18 11:11:52

+2

您需要将echo $ object - > {'operation.date'} – 2015-08-25 14:01:42

2

使用'as'功能更改sql以返回有效的属性名称

例如,选择operation.date如日期

8

访问属性以点应该是正确的方法:

echo $object->{"operation.date"} 
0

你可以得到assoc命令阵列,而不是通过使用$mysqli->fetch_assoc()