0

PDO を使用して SQL Server データベースに接続しようとしています。SQL Server に接続しようとしているページで、この致命的なエラーが発生します。

致命的なエラー: 例外 'PDOException' がキャッチされず、メッセージ 'SQLSTATE[IMSSP]: この拡張機能を使用するには、Microsoft SQL Server 2012 Native Client ODBC ドライバーが SQL Server と通信する必要があります。次の URL にアクセスして、x86 用の Microsoft SQL Server 2012 Native Client ODBC ドライバーをダウンロードします: http://go.microsoft.com/fwlink/?LinkId=163712 '

http://www.microsoft.com/en-us/download/details.aspx?id=20098 (SQLSRV30.EXE)からドライブをダウンロードし ました サーバーに php がインストールされている ext ディレクトリにこれらのドライバーを配置しました2008 R2 サーバー。

また、php.ini ファイルの拡張子リストの最後にこれらの 2 行を追加しました。

extension=php_pdo_sqlsrv_53_nts.dll
extension=php_sqlsrv_53_nts.dll

PH PVersion 5.3.19 を使用しています サーバー API CGI/FastCGI スレッド セーフティが無効になっています

表示されますpdo_sqlsrvが、クライアント API バージョンが表示されません。

PDO を使用して SQL データベースを持つリモート サーバーに接続できるようにするには、他に何をする必要がありますか? リモートサーバーに何かインストールする必要はありますか?

これは、私の php の管理セクションのスクリーンショットです。

ここに画像の説明を入力

これは私の接続クラスです

<?php

class connection {

    private $connString;
    private $userName;
    private $passCode;
    private $server;
    private $pdo;
    private $errorMessage;
    protected $lastQueryTime;
    protected $lastQuery;

    private $pdo_opt = array (
                            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
                            );




    function __construct($dbName = DATABASE_NAME, $serverName = DATABASE_HOST){

        //sets credentials
        $this->setConnectionCredentials($dbName, $serverName);

        //start the connect
        $this->startConnection();

    }

    function startConnection(){


            $this->pdo = new PDO($this->connString, $this->userName, $this->passCode, $this->pdo_opt);

            if( ! $this->pdo){

                $this->errorMessage  = 'Failed to connect to database. Please try to refresh this page in 1 minute. ';
                $this->errorMessage .= 'However, if you continue to see this message please contact your system administrator.';
                echo $this->getError();
            }
    }


    //this will close the PDO connection
    public function endConnection(){

        $this->pdo = null;
    }

    //return a dataset with the results
    public function getDataSet($query, $data = NULL)
    {
        $start = microtime(true);
        $cmd = $this->pdo->prepare( $query );

        $cmd->execute($data);
        $ret = $cmd->fetchAll();
        //$cmd->closeCursor();
        $this->lastQueryTime = microtime(true) - $start;
        $this->lastQuery = $query;

        return $ret;
    }



    public function processQuery($query, $data = NULL)
    {
        $start = microtime(true);
               //$this->pdo->beginTransaction();


        $cmd = $this->pdo->prepare( $query );
        $ret = $cmd->execute($data);
               //$this->pdo->commit();
               //$cmd->closeCursor();
        $this->lastQueryTime = microtime(true) - $start;
        $this->lastQuery = $query;

        return $ret;
    }


    //return last insert id
    public function lastInsertId($name = NULL) {
        if(!$this->pdo) {
            return false;
        }

        return $this->pdo->lastInsertId($name);
    }



    public function getOneResult($query, $data = NULL){
        $cmd = $this->pdo->prepare( $query );
        $cmd->execute($data);

        return $cmd->fetchColumn();
    }

    public function getError(){
        if($this->errorMessage != '')
            return $this->errorMessage;
        else
            return true;  //no errors found

    }

    //this where you need to set new server credentials with a new case statment
    function setConnectionCredentials($dbName, $serv){

        switch($serv){


            //MS SQL server
            case 'SQLSERVER':
                $this->connString   = 'sqlsrv:server='.$serv.';database='.$dbName;
                $this->userName     = 'username';  
                $this->passCode     = 'password';  
            break;

            //the defaults are predefined in the APP_configuration file - DO NOT CHANGE THE DEFAULT
            default:
                $this->connString   = 'mysql:host='.DATABASE_HOST.';dbname='.DATABASE_NAME.';charset=utf8';
                $this->userName     = DATABASE_USERNAME;
                $this->passCode     = DATABASE_PASSWORD;
            break;

            }

    }


public function lastQueryTime() {
    if(!$this->lastQueryTime) {
        throw new Exception('no query has been executed yet');
    }
    return $this->lastQueryTime;
}

public function lastQuery() {
    if(!$this->lastQuery) {
        throw new Exception('no query has been executed yet');
    }
    return $this->lastQuery;
}



}



?>

これは、クラスを使用してデータセットを取得する方法です

<?php
include('connection.php');

$sql_db = new connection('databaseName','SQLSERVER');

$call_details = $sql_db->getDataSet('SELECT
                                    LocalUserId AS loginName,
                                    RemoteNumberCallId AS PhoneNumber,
                                    SUM(CallDurationSeconds + HoldDurationSeconds + LineDurationSeconds) AS totalTalk
                                    FROM dbo.CallDetail WHERE LocalUserId = \'blah\' AND RemoteNumberCallId = \'123456789\'
                                    GROUP BY LocalUserId, RemoteNumberCallId');


$call_details->endConnection();

?>

このコードを試してみたので、クラスを使用しませんが、それでも同じエラーが発生します

 $ss = new PDO("sqlsrv:server=SQLSERVER; Database=databaseName", "userName", "Password");
4

2 に答える 2

5

私は交換しました

拡張子=php_sqlsrv_53_nts.dll
拡張子=php_pdo_sqlsrv_53_nts.dll

拡張子=php_pdo_sqlsrv_53_nts_vc9.dll
拡張子=php_sqlsrv_53_nts_vc9.dll

SQLSRV30.EXE を使用することに決めました SQLSRV20.EXE を使用しました これは機能しました。

@FreshPrinceOfSo ご協力ありがとうございます :)

ありがとう :)

于 2013-04-26T00:21:35.843 に答える
1

Windows Server 2008 R2 の個人的なインストールと、PHP/SQL Server による構成。

  1. PHP ダウンロードからVC9 x86 Non Thread Safeの最新の安定した .zip リリースをダウンロードします。
  2. PHP ディレクトリに解凍します。
  3. Microsoft Drivers 3.0 for PHP for SQL Server をダウンロード
  4. PHP ディレクトリに解凍します。\ext
  5. 以下の拡張子をphp.ini

    [PHP_SQLSRV_54_NTS]

    extension=php_sqlsrv_54_nts.dll

    [PHP_PDO_SQLSRV_54_NTS]

    extension=php_pdo_sqlsrv_54_nts.dll

于 2013-04-25T20:19:45.623 に答える