将PHP类从mssql_更新为sqlsrv_

Nic*_*ick 0 php sql-server

我们刚刚在我们的服务器上更新了PHP,大部分都很好,但不幸的是不再支持mssql_函数.我试图更新我们以前的课程:

$connection['server'] = 'server, port';
$connection['user'] = 'user';
$connection['pass'] = 'pass';
$connection['db'] = 'db';

class mssqlClass {
    function connect($dbhost = NULL){
        global $connection;
        if(! ISSET ($dbconnect)){
            $dbconnect = mssql_Connect($connection['server'], $connection['user'], $connection['pass'], true);
        }
        if(! $dbconnect){
            return 'Failed to Connect to Host';
        }else{
            $select = mssql_select_db($connection['db'], $dbconnect);
            if(! $select){
                return 'Failed to select Database';
            }else{
                return $dbconnect;
            }
        }
    }

    function getData ($query){
        $this->data_array = array();
        $result = mssql_query($query);
        while ($row = mssql_fetch_assoc($result)) {
                    $this->data_array[] = $row;                                                    
        }
        $m = $this->data_array;                     
        return $m;
    }    
    function query($query){           
        $result = mssql_query($query) or die("Query didn't work");
    }
}
Run Code Online (Sandbox Code Playgroud)

为了符合sqlsrv_,虽然我可以毫无问题地连接到数据库,但它不会返回任何数据!:

class mssqlClass {
    function connect($database = 'Db') {
        $mssql_server = 'server';
        $mssql_data = array("UID" => 'uid',
                        "PWD" => 'pwd',
                        "Database" => $database);
        if(! ISSET ($dbconnect)){
            $dbconnect = sqlsrv_connect($mssql_server, $mssql_data);
        }
        if(! $dbconnect){
            return 'Failed to connect to host';
        }
    }

    function getData ($query) {
        $result = sqlsrv_query($db->connect, $query);
        while ($row =  sqlsrv_fetch_array($result)) {

                    $this->data_array[] = $row;                                                    
        }
        $m = $this->data_array;                     
        return $m;
    } 
    function query($query) {           
        $result = sqlsrv_query($query) or die("Query didn't work.");
    }
}
Run Code Online (Sandbox Code Playgroud)

PS.示例用法如下:

$db = new mssqlClass();
$conn = $db->connect('DATABASE');

$query = "SELECT * FROM Table";
$result= $db->getData($query);
Run Code Online (Sandbox Code Playgroud)

对于可怕数量的代码很抱歉 - 我可以将其编辑为getData函数,如果这更容易吗?谢谢!!

bin*_*yLV 5

我在你班上做了一些改变:

<?php

class mssqlClass {

    protected $connection = null;

    public function connect($database = 'Db') {
        // we don't need to connect twice
        if ( $this->connection ) {
            return;
        }
        // data for making connection            
        $mssql_server = 'gc-hr01';
        $mssql_data = array("UID" => 'uid',
                        "PWD" => 'pwd',
                        "Database" => $database);
        // try to connect                    
        $this->connection = sqlsrv_connect($mssql_server, $mssql_data);
        if(! $dbconnect){
            return 'Failed to connect to host';
        }
    }

    public function getData ($query) {
        // reset results; is this really needed as object's variable? Can't it be just local function's variable??
        $this->data_array = array();
        $result = $this->query($this->connection, $query);
        while ($row = sqlsrv_fetch_array($result)) {
            $this->data_array[] = $row;                                                    
        }
        return $this->data_array;                     
    }

    public function query($query) {           
        $result = sqlsrv_query($query) or die("Query didn't work..");
    }

}
Run Code Online (Sandbox Code Playgroud)