我正在尝试从mysqli过程式迁移到PDO,因为我的网站有一半是pdo,剩下的是mysqli过程式,现在我想完全迁移到PDO。
$rowNum = 0;
foreach ($result->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_OBJ) as $row) {
$rowNum = $rowNum + 1;
$dbUsername = $row['Username'];
}
if ($row>0) {
echo $dbUsername;
}
但在某些情况下,代码会给我一个错误trying to get property 'Username' of non-object
我知道可以只使用($result->fetchAll(PDO::FETCH_ASSOC)
但是这样做($result->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_OBJ)
成为一种需要,因为我正在修改的代码的一些上下文使用类似$row->Usename
的符号,另一个使用$row['Username
'],我如何让它接受如上所示的两种模式?
我尝试使用PDO::FETCH_BOTH,但问题仍然存在。
2条答案
按热度按时间332nm8kg1#
正如@YourCommonSense在他的评论中所指出的,你可以使用
PDO::FETCH_LAZY
来实现这一点,但是你不能用fetchAll
来实现,只能用fetch
来实现:如果你真的想使用
fetchAll
,你必须把行作为一种类型来获取,然后在数组和对象之间来回转换:bz4sfanl2#
这是不可能的。你不可能同时得到这两个结果。在PHP中没有办法表示这样的结果。
当你尝试在
PDO::FETCH_ASSOC|PDO::FETCH_OBJ
中同时使用这两个参数时,你实际上是在获取PDO::FETCH_COLUMN
的结果。这是因为fetch参数是一个按位标志参数。当你对这些标志进行OR运算时,它与2|5 = 7
相同。7是PDO::FETCH_COLUMN
的值。我不知道你有什么样的用例,但这听起来像是一个XY问题。如果你使用
fetchAll()
,你不能同时将它作为数组和对象。但是如果你使用fetch()
逐行读取它,你可以用不同的方式读取每一行。