php adodb接続mssql乱符号化問題の解決

2820 ワード

周海漢/文
ADOは、new COM(「ADODB.Connection」、NULL、CP_UTF 8)/6501のような文で正しい変換を実現することができる.しかし、ADOのphpのサポートにはドキュメントが不足しています.オープンソースのadodbがあり、ドキュメントが豊富です.
ここで、異なるデータベースドライバに対してUTF-8を設定する方法は、以下のように異なります.
 
  
For all drivers
'persist', 'persistent', 'debug', 'fetchmode', 'new'
Interbase/Firebird
'dialect','charset','buffers','role'
M'soft ADO
'charpage'
MySQL
'clientflags'
MySQLi
'port', 'socket', 'clientflags'
Oci8
'nls_date_format','charset'
For all drivers
'persist', 'persistent', 'debug', 'fetchmode', 'new'
Interbase/Firebird
'dialect','charset','buffers','role'
M'soft ADO
'charpage'
MySQL
'clientflags'
MySQLi
'port', 'socket', 'clientflags'
Oci8
'nls_date_format','charset'

ここで、AdoはcharPageという属性を使用してuft-8を設定することができ、new COMのように設定することができます.ただし、AdoNewConnection($dbdriver)の$dbdriverを「ado」または「ado_mssql'の場合、転送されたdatabaseはproviderに置き換えられます.ではdatabaseの名前はどのように設定しますか?ずっと方法が見つからなかった.
$dbdriver='ado://sa:[email protected]/sqloledb?charpage=65001';
フォーマットはdriver://user:passwd@host/database?options[=value]
しかし、データベース名を設定する場所は解決されませんでした.
長い間苦しんでいたが、次のような方法で解決するしかなかった.
 
  





$dbdriver='ado_mssql';
$server='192.168.22.40';
$user='sa';
$password='passwd';
$DATABASE='sugarcrm_db';
$database='sqloledb';
//$dbdriver='ado://sa:[email protected]/sqloledb?charpage=65001';
$myDSN="PROVIDER=MSDASQL;DRIVER={SQL Server};SERVER={172.16.22.40};DATABASE=sugarcrm_db;UID=sa;PWD=cvttdev;";
include('adodb5/adodb.inc.php');
$db = ADONewConnection($dbdriver); # eg 'mysql' or 'postgres'
$db->debug = true;
$db->charPage =65001;
//$db->Connect($server, $user, $password, $database);
$db->Connect($myDSN);
//error:mssql server not support codes below
//$db->Execute("set names 'utf8'");
echo "before query";
$rs = $db->Execute('select * from accounts');
print "
"; 
  
print_r($rs->GetRows());
print "
";
?>