【问题标题】:How to get php-native handle from Doctrine\DBAL\Connection?如何从 Doctrine\DBAL\Connection 获取 php-native 句柄?
【发布时间】:2021-12-08 06:09:20
【问题描述】:

给定代码

$connectionParams = array(
    'dbname' => $this->dbname,
    'user' => $this->dbuser,
    'password' => $this->dbpass,
    'host' => $this->dbhost,
    'driver' => 'mysqli',
);

$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);        
var_dump($conn);

我怎样才能从 $conn(它是一个 Doctrine\DBAL\Connection)获取底层的 mysqli 句柄?

我找到了*一种方法* 来访问它,但它显然不是它应该完成的方式,所以我愿意提供建议:

$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);        
foreach((array)$conn->getWrappedConnection() as $mysqli){
    // TODO: find official way of getting the handle.
    // here we are casting it to (array) to access its PRIVATE PROPERTIES
    // it's a fugly hack. 
    break;
}
var_dump($mysqli);

【问题讨论】:

  • $conn->getWrappedConnection() 返回什么?
  • @Dharman 它返回 Doctrine\DBAL\Driver\Mysqli\Connection,不管是什么
  • 对,那它的属性是什么?不是有一个叫mysqliconn吗?
  • @Dharman 它有一个名为 connprivate 属性,其中包含 mysqli 句柄,它有 0 个公共属性 :( 它有 8 个公共方法,但没有一个返回据我所知,任何相关的内容(beingTransaction、commit、exec、lastInsertId、prepare、query、quote 和 rollBack)

标签: php mysqli doctrine


【解决方案1】:

你可以这样得到:

$mysqli = $conn->getWrappedConnection()->getWrappedResourceHandle();

【讨论】:

  • 谢谢!奇怪的是 getWrappedResourceHandle() 不是接口 Doctrine\DBAL\Driver\Connection 的一部分,这是我寻找它的方法的地方,我使用 var_dump() 来查看它的属性,所以我错过了它
猜你喜欢
  • 2014-05-22
  • 2012-12-12
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2013-05-11
  • 2018-05-15
  • 2022-01-16
  • 2015-06-29
相关资源
最近更新 更多