mssql_connect和sqlsrv_connect的区别

3

我刚刚将连接驱动程序(扩展)从 mssql_connect 更改为使用 sqlsrv_connect。不幸的是,事情似乎并不像我想象的那样工作。如果有人能告诉我出了什么问题以及如何解决它,我会很感激。

代码摘录:

//a oracle DB moudle with a generic functions such as 
//db_connect() db_query()

/// turn on verbose error reporting (15) to see all warnings and errors 
error_reporting(15);
//generic DB operations

// Global record . for using in 
$curr_rec = NULL;

function dbok($res)
{
    if($res==false){
        echo "DB error: "."FIXME need error mesg"."\n";
        exit;
    }
    return $res;
}

function db_now_expr()
{
    return "getdate()";
}

function db_is_connected($dbh)
{
    return $dbh>0;
}

function ensure_connected($dbh)
{
    if(!db_is_connected($dbh)) die("DB is not connected, operation failed");
    //echo "DEBUG: hdb=$dbh"; 
}

//connect to given database 
//return handler to DB


function dbo_logon($dbserver,$dbname)
{

    $tsql = ??????? ====>>> what should i put here???? 

    $dbserver = "computername\SQLEXPRESS";
    $dbname = MY_Database_name;

    $connectionOptions = array("Database"=>"BULL");

    $dbh=dbok(sqlsrv_connect($dbserver, $connectionOptions));
    dbok(sqlsrv_query($dbname,$dbh)); 

    $stmt = sqlsrv_query( $connectionOptions, $tsql );

    return $dbh;

}

//close DB
function dbo_logoff($dbh)
{
    if(!db_is_connected($dbh)) echo("DB disconnect error");
    sqlsrv_close($dbh);
}

以下是使用 mssql_connect 的原始代码:

//a oracle DB module with a generic function such as 
//db_connect() db_query()

/// turn on verbose error reporting (15) to see all warnings and errors 
error_reporting(15);
//generic DB operations

// Global record . for using in 
$curr_rec = NULL;

function dbok($res)
{
    if($res==false){
        echo "DB error: "."FIXME need error mesg"."\n";
        exit;
    }
    return $res;
}

function db_now_expr()
{
    return "getdate()";
}

function db_is_connected($dbh)
{
    return $dbh>0;
}

function ensure_connected($dbh)
{
    if(!db_is_connected($dbh)) die("DB is not connected, operation failed");
    //echo "DEBUG: hdb=$dbh"; 
}

//connect to given database 
//return handler to DB
function dbo_logon($dbserver,$dbuser,$dbpass,$dbname)
{
    // $dbh=dbok(mssql_pconnect($dbserver,$dbuser,$dbpass));
    $dbh=dbok(mssql_connect($dbserver,$dbuser,$dbpass));
    //error_log("connect to [$dbname]".date("His")." \r\n",3,"/tmpbull.log"); //DBEUG DELME
    dbok(mssql_select_db($dbname,$dbh));
    //dbo_exec($dbh,"alter session set NLS_DATE_FORMAT='dd-mm-yyyy //hh24:mi:ss'");
    return $dbh;

}

//close DB
function dbo_logoff($dbh)
{
    if(!db_is_connected($dbh)) echo("DB disconnect error");
    mssql_close($dbh);
}

请注意,我不得不将身份验证方法从SQL身份验证更改为Windows身份验证,因为sqlsrv_connect使用的是Windows身份验证而不是SQL身份验证。这样做正确吗?


1
定义“似乎不按照我想要的方式工作”。 - Lightness Races in Orbit
2个回答

2
我认为这两个链接可以帮助理解“mssql和sqlsrv之间的区别”。 尽管简短,但引用其中一篇文章的话来说:
sqlsrv 驱动程序由 Microsoft 构建、维护和支持。”
而且
mssql 驱动程序是一个社区构建的驱动程序。我不确定这个驱动程序最近是否作为官方 PHP 扩展进行了更新或维护,但是自 PHP 5.3 发布以来,它已不再与 PECL 一起提供。快速的互联网搜索可以找到一些下载 mssql 驱动程序的地方,但我找到的没有一个表明该驱动程序正在积极维护。”
来源:http://blogs.msdn.com/b/brian_swan/archive/2010/03/08/mssql-vs-sqlsrv-what-s-the-difference-part-1.aspx 至于您的代码示例,请参见下文:
$dbserver = "computername\SQLEXPRESS";

$dbname = "BULL";   
$connetion = dbo_logon($dbserver,$dbname);  
function dbo_logon($dbserver,$dbname) {  
    $connectionOptions = array("Database"=>$dbname);  
    $dbh=sqlsrv_connect($dbserver, $connectionOptions);  
    if(!$dbh){  
         die("Error in Database connection");  
         return false;   
    }  
 return $dbh;   
 }
我认为这个连接会起作用。请注意,代码未经测试。

0

"sqlsrv驱动程序由Microsoft构建、维护和支持。"截至2014年9月,还没有官方发布支持php 5.6的版本,最后一个官方版本发布于2012年4月。这是微软的风格...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接