PHP7 PDO_DBLIB 唯一标识符

PHP7 PDO_DBLIB uniqueidentifier

我目前在我的项目中使用 pdo_dblib 扩展。 当我在 PHP 5.6 下使用它并在 config. 中设置 FreeTDS Version 7.0 时,它将给我唯一标识符 string。 当我在 PHP 7.0.8 下使用相同的脚本时,它只会给我一些乱码。 我不想在 SQL 中转换它或稍后在 PHP 中转换它。因为有时它可以是结果中的唯一标识符,有时不是。所以我需要通过完整的结果来转换唯一标识符。

那么有什么解决方案可以像在 PHP 5.6 下一样在 PHP 7.0.8 上工作吗?

看起来这个错误是在 PHP7 的某个次要版本中引入的。

  • 7.0.4 完美运行。可以用phpbrew手动编译。
  • 7.0.8 目前已损坏此实现。

此处已针对此问题提交错误报告:https://bugs.php.net/bug.php?id=72601

和潜在修复的拉取请求: https://github.com/php/php-src/pull/2001

将以下标志添加到您的 \PDO 实例

/** @var \PDO $pdo */
$pdo->setAttribute(\PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true);

正如 Bojan 的回答中提到的 pull request 中所解释的,PHP 7 中这个问题的原因是您必须指示 PDO 将 GUID 从二进制转换为字符串。

这应该适用于遇到此问题的任何人。

    /** @var \PDO $pdo */
    $pdo->setAttribute(\PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true);