【问题标题】:Is there a way of using PDO::FETCH_ASSOC and PDO::FETCH_OBJ at the same time?有没有同时使用 PDO::FETCH_ASSOC 和 PDO::FETCH_OBJ 的方法?
【发布时间】:2015-10-23 09:57:02
【问题描述】:

是否可以使用 PDO 同时以两种不同的方式显示数据库中的记录?我的意思是我想同时将记录作为对象和数组回显。

我尝试使用$db_conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_BOTH);,但它不起作用。我收到了这个错误,我知道这意味着什么:Notice: Trying to get property of non-object

我也这样设置,结果相同:

$db_conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$db_conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

当我尝试从我使用的数据库中获取数据时:

$db_conn = new PDO('mysql:host=localhost;dbname=test;charset=utf8', $db_user, $db_pass, array(
                        PDO::ATTR_PERSISTENT => true
                ));
$sql = $db_conn->prepare('SELECT * FROM table_name');
$sql->execute();
$all_data = $sql->fetchAll();
foreach($all_data as $row){
    echo $row->col1;
    echo $row['col1'];
}

【问题讨论】:

  • 为什么投反对票?我认为这是一个非常合理的问题......
  • 请显示您的整个数据库连接设置代码。
  • @JonStirling,我已经更新了我的问题。
  • 错误信息提示$db_conn不是对象,表示数据库连接失败。你应该专注于此。
  • $row要么是数组,要么是对象,不能同时是。

标签: php mysql sql pdo


【解决方案1】:

您可以定义一个实现ArrayAccess 接口的类,因此可以使用数组语法访问属性。然后你可以这样做:

$db_conn->setFetchMode(PDO::FETCH_CLASS, 'YourClass');

上面的文档链接有一个简单类定义的例子。

【讨论】:

  • 没试过,但我不明白为什么不应该。
  • 试一试。如果有效,请接受答案。如果没有,请告诉我出了什么问题。
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 2012-08-19
  • 2016-01-19
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2016-05-28
相关资源
最近更新 更多