Php PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER被忽略

Php PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER被忽略,php,sql-server,pdo,Php,Sql Server,Pdo,我在Ubuntu 16.04上,安装了php7.0-sybase包(版本7.0.18-0ubuntu0.16.04.1)。FreeTDS的版本是0.91(目前Ubuntu上提供的最新版本) 这是我的/etc/freetds/freetds.conf [global] text size = 64512 [mssql] host = 192.0.1.5 port = 1433 tds version = 8.0 这是我的/etc/o

我在Ubuntu 16.04上,安装了php7.0-sybase包(版本7.0.18-0ubuntu0.16.04.1)。FreeTDS的版本是0.91(目前Ubuntu上提供的最新版本)

这是我的
/etc/freetds/freetds.conf

[global]
        text size = 64512
[mssql]
        host = 192.0.1.5
        port = 1433
        tds version = 8.0
这是我的
/etc/odbc.ini

[mssql]
Description    = MSSQL Server
Driver         = freetds
Database       = MY_DB
ServerName     = MSSQL
TDS_Version    = 8.0
下面是我正在尝试的php脚本

<?php
$pdo = new PDO('dblib:host=192.0.1.5;port=1433;dbname=MY_DB;charset=UTF-8', 'my_user', 'my_pass');
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true);

$sql = 'SELECT TOP 1 my_field FROM dbo.my_table';
$stmt = $pdo->prepare($sql);
$stmt->execute();
print_r($all = $stmt->fetchAll());

出于性能考虑,您的数据库可能正在将guid存储为二进制。您将需要转换二进制({ɯ▒▒0▒@▒G▒$▒▒n) 使用PHP或SQL函数将GUI转换为十六进制(8CAFC97B-30C2-4096-9367-9D240085A16E)。我正在开发一个系统,该系统在MySQL数据库上使用GUI作为二进制。下面是一个代码,我使用它将十六进制转换为二进制,在DB上插入,并从二进制转换为十六进制,以获得人类可读的内容:

从二进制到十六进制:

public static function getId($string)
{
    return strtoupper(preg_replace('/([a-zA-Z0-9]{8})([a-zA-Z0-9]{4})([a-zA-Z0-9]{4})([a-zA-Z0-9]{4})([a-zA-Z0-9]{12})/', '$1-$2-$3-$4-$5', bin2hex($string)));
}
从十六进制到二进制:

public static function generateId($string)
{
    return hex2bin(str_replace('-', '', $string));
}
请记住,您需要删除GUID的破折号才能转换为二进制

这些函数在我的系统中的一个助手类中。因此,每当我需要它们时,我只需调用该助手。如果对您有利,您也可以在整个应用程序中使用它