Php PDO::fetch_assoc和fetch_对象差异&;最佳使用时间

Php PDO::fetch_assoc和fetch_对象差异&;最佳使用时间,php,pdo,Php,Pdo,我环顾四周,似乎找不到任何关于何时使用或不使用PDO::FETCH_ASSOC或PDO::FETCH_OBJECT的好线索或解释,在获取用户名等信息时,我总是使用ASSOC,但什么时候可以在上面使用OBJECT呢?反之亦然。我已经检查过了,但是我仍然在努力思考,如果有人能提供一个例子来解释的话,我会非常感激 谢谢默认情况下,pdo fetch和FECTALL允许使用双向assoc和object。 如果您的列名在ascii之外有空格或其他字符,那么我们应该使用assoc而不是object$row[

我环顾四周,似乎找不到任何关于何时使用或不使用
PDO::FETCH_ASSOC
PDO::FETCH_OBJECT
的好线索或解释,在获取用户名等信息时,我总是使用
ASSOC
,但什么时候可以在上面使用OBJECT呢?反之亦然。我已经检查过了,但是我仍然在努力思考,如果有人能提供一个例子来解释的话,我会非常感激


谢谢

默认情况下,pdo fetch和FECTALL允许使用双向assoc和object。 如果您的列名在ascii之外有空格或其他字符,那么我们应该使用assoc而不是object
$row['thename']
$row->名称
(这会导致ARRO)。 或者像
$row->colômn//那样导致错误

我认为这就是我们应该使用

的原因简而言之,如果您需要对象语法,您就会知道它!基本上,在希望将数据库中的行作为具有属性的对象处理的情况下,
fetch\u object
方法为您提供了创建它们的方便方法


你为什么要这么做?它是“对象关系映射”的一种简单形式,是处理进出数据库的数据的常用方法。让我们从另一端开始:假设您已经有一些具有属性的对象,并且希望将它们持久化到数据库中。然后,您将声明一个表来保存对象实例,每个属性都有一列,然后使用此方法重新读取对象。

没有基本区别。是否将行作为对象或数组返回实际上取决于您。你更喜欢哪个,哪个在你的应用程序中最有意义。取决于你想使用什么。一般来说,我之所以选择对象表示法,是因为
$object->property
$array['key']]
更易于键入和阅读,教程或其他非站点资源对于堆栈溢出来说是非主题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。作为对象获取的一个用例是,您可以指定希望PDO实例化并填充数据的类。因此,如果您要求将数据作为特定对象的结果集返回(可能是为了强制执行特定行为或遵守接口),您可以这样做。谢谢您的回答,但这并没有真正意义。你能详细解释一下吗?@Pascal,我明白你的意思:有些情况下对象语法不能使用。到目前为止,一切都很好,你是对的。但是OP的问题是,什么时候/为什么要使用对象语法?@alexis OP想知道什么时候使用一个而不是另一个更合适:什么时候在它上面使用对象更合适?反之亦然。这提供了一个不使用
FETCH_OBJ
的用例。为了澄清,默认情况下,
PDOStatement::FETCH()
PDOStatement::fetchAll()
使用
PDO::ATTR_default_FETCH_MODE
(默认
PDO::FETCH_两者
)返回一个按列名和0索引列号索引的数组。ie
[0=>'value','column\u name'=>'value']
啊,我明白了!谢谢投票通过并被接受!想想我的问题吧,虽然RIPP6个月后见hsss:DTo如果你已经有了一些具有属性的对象,如果对象是实例化的,而不是一个具有声明属性的“类”,那么我的问题就被恢复了。您通常希望使用
PDOStatement::setFetchMode(PDO::FETCH_INTO$object)
,然后是
PDOStatement::FETCH()
。默认情况下,
fetch_object
PDOStatement::fetch(PDO::fetch_OBJ)
PDOStatement::setFetchMode(PDO::fetch_CLASS,'stdClass')
的另一种语法,它生成以数据库列名为属性的匿名对象。有问题吗?我很惊讶,这不是一个可怕的问题。。。好吧,我希望你早点离开@fyrye,谢谢你的代码细节!(这个问题是概念性的,所以我认为答案中不需要代码,但很感谢:-))。很清楚,我的答案描述的是一种情况,你有数据对象,你把它们写进数据库,然后在以后的某个时候,在以后的程序中,您可以从数据库中获取数据并创建新对象来保存数据。因为OP希望知道何时使用
fetch\u OBJ
比使用
fetch\u ASSOC
更合适。这比概念上的更为固执己见,因为除了个人偏好或未提供的特定于应用程序的要求之外,没有一个正确的答案。由于
FETCH\u OBJ
始终只会生成一个匿名对象,并且提到了将列数据作为对象属性读回,因此我确定了类、对象、
FETCH\u OBJ
FETCH\u object()
FETCH\u object('class')
之间需要解决的区别。