2017-06-06 10 views
0

私はUbuntu 16.04上にあり、パッケージphp7.0-sybase(バージョン7.0.18-0ubuntu0.16.04.1)がインストールされています。 FreeTDSのバージョンは0.91(Ubuntuの上で、最新の現在入手可能)がPDO :: DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIERは無視されます

これはこれは、次の私の/etc/odbc.ini

[mssql] 
Description = MSSQL Server 
Driver   = freetds 
Database  = MY_DB 
ServerName  = MSSQL 
TDS_Version = 8.0 

の内容であるPHPで私の/etc/freetds/freetds.conf

[global] 
     text size = 64512 
[mssql] 
     host = 192.0.1.5 
     port = 1433 
     tds version = 8.0 

の内容であります私が試しているスクリプト

<?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()); 

Ie xpectではなく、私は例えば

バイナリコンテンツを取得しています、GUIDとしてフィールドの内容を見て、私は[my_field] => 8CAFC97B-30C2-4096-9367-9D240085A16Eを見ることを期待し、代わりに私が[my_field] => {ɯ▒▒0▒@▒g▒$▒▒n

答えて

0

おそらくデータベースがバイナリとしてGUIDを格納しているを取得し、パフォーマンス目的のために。 PHPまたはSQL関数を使用してバイナリ(16進数)を16進数(8CAFC97B-30C2-4096-9367-9D240085A16E)に変換する必要があります。私は、MySQLデータベース上でバイナリとしてGUIDを使用するシステムを開発しています。 16進数にバイナリから

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))); 
} 

ここで私はDBに挿入するために、六角からバイナリに変換するために、使っていて、バイナリから人間が読めるコンテンツを取得するためにはHexにコードがあります16進数からバイナリ:

public static function generateId($string) 
{ 
    return hex2bin(str_replace('-', '', $string)); 
} 

バイナリに変換するには、GUIDのダッシュを削除する必要があることに注意してください。

これらの機能は、私のシステム内のヘルパークラスにあります。だから私がそれらを必要とするたびに、私はヘルパーに電話するだけです。また、それがあなたのために良い場合は、すべてのアプリケーションで利用できるようにすることができます。

関連する問題