概要 要するに 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) 接続と通常処理