概要 要するに ADO です。ADO はかなり信頼性のある安定した Windows におけるDB 処理の為の 選択肢です。PHP における COM は完璧ではありませんが、PHP 側のインターフェイスを使 うより、慣れている者にとっては問題点が容易に予想でき、既存のコードもあるていど そのまま利用できるという長所があります。 一部日本語列名を使った参照に問題が出るので、連想配列に入れなおす必要がありますが、 この部分で他のキャラクタセットの対応が出来ますし、オリジナルオプションを付加する チャンスでもあります
<?
// **********************************************************
// SQLExpress 2005 / OLE DB / 純正接続
// COM(ADO) : 読み込みと更新
// **********************************************************
$Cn = new COM( "ADODB.Connection" );
$Cn->CursorLocation = 3;
$Rs = new COM( "ADODB.Recordset" );
$strTarget = "NIGHT_TCP"; // 別名
$strDB = "lightbox";
$strUser = "sa";
$strPass = "passwordpassword";
// **********************************************************
// 接続文字列
// **********************************************************
$ConnectionString =
"Provider=SQLOLEDB;" .
"Data Source=$strTarget;" .
"Initial Catalog=$strDB;" .
"User ID=$strUser;" .
"Password=$strPass;";
/*
// ODBC 接続 / {SQL Server}
$strDriver = "{SQL Server}";
// SQL Server は、TCP/IP と 名前付きパイプで接続されました
$ConnectionString =
"Provider=MSDASQL;" .
"Driver=$strDriver;" .
"SERVER=$strTarget;" .
"DATABASE=$strDB;" .
"USER=$strUser;" .
"PWD=$strPass;";
*/
/*
// ODBC 接続 / {SQL Native Client}
$strDriver = "{SQL Native Client}";
// TCP/IP で接続するのに、Trusted_Connection=yes; が必要でした
// http://technet.microsoft.com/ja-jp/library/ms130822(SQL.90).aspx
// 上記指定が無い場合、名前付きパイプでは接続されました
// $strTarget = "lbox"; // 名前付きパイプの別名
$ConnectionString =
"Provider=MSDASQL;Trusted_Connection=yes;" .
"Driver=$strDriver;" .
"SERVER=$strTarget;" .
"DATABASE=$strDB;" .
"USER=$strUser;" .
"PWD=$strPass;";
*/
// **********************************************************
// 接続
// **********************************************************
$Cn->Open( $ConnectionString );
$Query = "select * from [社員マスタ]";
// **********************************************************
// レコードセット
// **********************************************************
$handle = fopen( ".\\社員マスタ.csv", "w" );
// レコードセットが開いていたら、閉じておく
if ( $Rs->State >= 1 ) {
$Rs->Close();
}
$Rs->Open( $Query, $Cn );
$nFields = $Rs->Fields->Count;
$hbuffer = "";
$update_cnt = 0;
while( !$Rs->EOF ) {
if ( $hbuffer == "" ) {
for( $i = 0; $i < $nFields; $i++ ) {
if ( $hbuffer != "" ) {
$hbuffer .= ",";
}
$hbuffer .= $Rs->Fields[$i]->Name;
}
fwrite( $handle, $hbuffer . "\n" );
}
$buffer = "";
for( $i = 0; $i < $nFields; $i++ ) {
if ( $buffer != "" ) {
$buffer .= ",";
}
$buffer .= $Rs->Fields[$i]->Value . "";
// 日本語名称で直接参照できないので、連想配列を作成
$Column[$Rs->Fields[$i]->name] = $Rs->Fields[$i]->value;
}
fwrite( $handle, $buffer . "\n" );
// 更新( 別接続 )
$day = ($update_cnt % 6) + 1;
$Query = "update [社員マスタ] set [生年月日] = '2005/01/0$day'";
// 連想配列で値を参照
$Query .= " where [社員コード] = '{$Column["社員コード"]}'";
$Cn->execute( $Query );
$Rs->MoveNext();
$update_cnt++;
}
// **********************************************************
// ファイルクローズ
// **********************************************************
fclose( $handle );
// **********************************************************
// 接続解除
// **********************************************************
@$Cn->Close();
?>
信頼関係接続は、解決策ではありません。 本来、ログインが必要なものを Windows の認証で代替するものです。 この場合、バグだと思われますが、どうしてもその環境で接続したい場合の 回避策です 関連する記事 ログイン・ユーザの作成
|
|
【SQLExpressの最新記事】
- SQLServer の BCP で INT IDENTITY 列に csv からリストアする
- VBScript : ADO : ODBC接続 : SQLExpress(SQLServer) 接続と通常処理( 更新は SQL で行う )
- Microsoft SQLExpress : sa に空のパスワードを設定する方法
- SQLExpress バッチ DB バックアップ
- C# : VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ
- 各RDBMS の正規表現の実装状況 : MySQL, SQLServer, PostgreSQL, Oracle
- SQLServer の OPENDATASOURCE 関数による Excel の参照( Microsoft.Jet.OLEDB.4.0 と Microsoft.ACE.OLEDB.12.0 )
- SQLServer(SQLExpress) : SQL学習用販売管理データとインポート用スクリプト
- SQLExpress 2005( および 2008 ) の接続設定
- SQLExpress 内に存在する表の CREATE 文を取得する
- ファイルから直接データベースを別のPCでリストアする / SQLExpress
- 目的のDBが使用している物理ファイルのパスの確認 / SQLExpress
- ピンポイントですが、SQLServer 2008 は SQLServer 7.0 のデータをロード出来ないのです
- SQLExpress2005 で副問い合わせを含む VIEW が異常終了しました
- VBS : SQLServerよりExcel へエクスポート(Excel製品は必要ありません)
- SQLServer のドキュメント
- VBS : SQLExpress(SQLServer) テーブルの正しい CREATE 文を取得する
- PHP : PDO : SQLExpress(SQLServer)の読み込みと同時更新
- ODBC 用 JDBC : 動的接続 / SQLExpress(SQLServer) / 読み込みながらの行更新
- VBScript : ADO : 純正接続 : SQLExpress(SQLServer) 接続と通常処理






