2016-11-30 7 views
0

仕事中にすでに確立されているデータベースに接続しようとしています。私たちはバックエンドにアクセスすることはできませんが、サーバーアドレスとそれに接続するためのログイン情報があります。昨年はPDOとdblibを使用して接続できましたが、dblibはPHP 7ではサポートされていません。私は、SQL Serverのドライバを使用しようとしています。SQL Serverがエラーに接続していないか、エラーを表示していません

私はそれをテストするための基本的な接続文字列を設定し、指定した任意のエラーを取得していないです、また私はどんな結果になっています:

<?php 
    //Display All Errors 
    ini_set('display_errors', 1); 
    ini_set('display_startup_errors', 1); 
    error_reporting(E_ALL); 

    echo "Test1"; 

//Try the Connection 
try { 
    //Connection Variables 
    $server = "11.123.123.123, 1234"; 
    $database = 'myDatabase'; 
    $username = "myUsername"; 
    $password = "myPassword"; 

    //Connection String 
    $conn = new PDO ("sqlsrv:Server=$server;Database=$database","$username","$password"); 

    //Initiating Error Detection 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

//Catch exceptions to the Try 
catch(Exception $e) { 
    echo "Test3"; 
    die(print_r($e->getMessage())); 
} 

//Prepare SQL Statement 
$stmt = $conn->prepare("SELECT * FROM WorksheetPriceChangeData"); 

//Execute SQL Statement 
$stmt->execute(); 
    while ($row = $stmt->fetch()) { 
     print_r($row); 
    } 
    echo "Test4"; 
?> 

(機密情報に使用プレースホルダを)。このコードの結果、上部に「Test1」エコーを表示する空のページが表示されます。私のPHOログにはエラーはありません。phpinfo()は、sqlsrv PDOとsqlsrv拡張(4.0.8629.3)がアクティブであることを示し、11.123.123.123のような偽のサーバアドレスを使用すると同じことをします。

また、私はWindows Server 2012 R2上にあり、データベースはデータソース管理者に表示されることを追加します。 「ネットワークログインIDを使用してWindows NT認証を使用する」チェックボックスをオンにし、「追加の構成オプションのデフォルト設定を取得するためにSQL Serverに接続する」チェックボックスをオンにして正常に接続します。

私はどのような方向性や考えを提供していただきありがとうと思います。エラーメッセージやログがなくても処理を進めることは困難です。

種類よろしく、 ベン・デビッド

+1

PDOと古いsqlsrvメソッドを混在させているようです。 PDOを使う場合、 'sqlsrv_prepare()'はPDOオブジェクトのメソッドではないので、 '$ dbh-> prepare()'と '$ stmt-> execute()'を呼び出す必要があります。スクリプトでエラー報告を有効にすると、PHPに致命的なエラーが表示されるはずです。あなたの最初のPDO接続は成功するかもしれませんが、メソッド呼び出しの誤りのために後続のコードが爆発します。あなたのスクリプトの一番上にある: 'error_reporting(E_ALL); ini_set( 'display_errors'、1); 'これらのメソッドを正しく取得することは、ここで行う必要があります。 –

+0

PDOの準備コールは、使用するRDBMSドライバに関係なく、[docsのように]見えるはずです(http://php.net/manual/fr/pdo.prepare.php)。メソッドと古いドライバ固有のAPIを混在させることはできません。 –

+0

こんにちはマイケル、助けてくれてありがとう - これは難しかったです。 PDOメソッドを反映するようにステートメントを変更しました(また、$ dbhの代わりに$ connを使用しましたが、これは元の誤ったものです)。私はエラーをオンにし、永続的な "invalid handle returned"を取得しています。私はdblibを使用したときと同じ資格情報を使用していますが、sqlsrvは接続していません。 – user4333011

答えて

1

この接続は、PHP 5.xの-7.X(x86アーキテクチャモードで実行されているPHPのバージョン)でのWindows Server 2012 R2上で動作します。

IISの新規インストール時には、まずPHPのバージョンを5.Xまたは7.Xに変更する必要があります(使用しているSybaseデータベースとハンドシェイクするには、x86アーキテクチャのバージョン7.0が必要です)。 > IISマネージャー> PHPマネージャーに行き、 "PHPバージョンの変更"を選択します。その後、ODBCデータソース32ビットの実行可能ファイルを実行し、 "myConnection"という名前の接続を作成することでODBC DSNを作成する必要があります(名前が異なる場合は、変数を調整する必要があります)。この接続は、SQL Anywhere 12ドライバを使用して作成する必要があります。接続は、データベースの資格情報と一致するサーバー名とデータベース名で作成する必要があります。

次へIISマネージャー>認証に移動します。 「匿名認証」を選択して「編集」をクリックし、「アプリケーションプールID」にチェックが入っていることを確認します。

これ以降、odbc_pdoドライバ/拡張機能をインストールして開始することによって、DSNを使用するようにPHPを設定する必要があります。まず、php_pdo_odbc.dllファイルが、使用しているバージョンのメインPHPディレクトリの/ extディレクトリにあることを確認してください( "Program Files(X86)"フォルダ内でこれらの調整を行っていることを確認してください。現在は非アクティブなx64 PHPバージョン) - それがダウンロードされていない場合はダウンロードしてください。ファイルがディレクトリに入ったら、PHPのメインディレクトリにあるphp.iniファイルを編集して、ファイルの最後の拡張ブロックに次の拡張行を追加します:extension = php_pdo_odbc.dllコンピュータを再起動すると、odbc_pdoドライバが有効になります。以下の接続スクリプトが動作し、そのデータベースのシステムオブジェクトの配列ブラストが出力されるはずです。

<?php  
     //---Display All Errors 
     ini_set('display_errors', 1); 
     ini_set('display_startup_errors', 1); 
     error_reporting(E_ALL); 

     echo "Boom! <br /><br />"; 

     //---Try the Connection 
     try { 

      //Connection Variables 
      $dsn = "odbc:myConnection"; 
      $username = "myUsername"; 
      $password = "myPassword"; 

      //Connection String 
      $conn = new PDO($dsn, $username, $password); 

      //Initiating Error Detection 
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } 

     //---Catch exceptions to the Try 
     catch(Exception $e) { 
      echo "Invalid Connection"; 
      //Print Error Messages 
      die(print_r($e->getMessage())); 
     } 

     //---SQL Statement(s) 
     $stmt = $conn->prepare("SELECT * FROM sysobjects WHERE type = 'U'"); 

     //---Execute SQL Statement 
     $stmt->execute(); 
      while ($row = $stmt->fetch()) { 
       print_r($row); 
       echo "<br />"; 
      } 

     echo "<br />Connected Successfully"; 
    ?> 
関連する問題