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);
我目前在我的项目中使用 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);