我刚刚将连接驱动程序(扩展)从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身份验证。是那么回事吗?
发布于 2011-06-10 03:14:57
我认为这两个链接将有助于理解mssql和sqlsrv之间的差异。
尽管简而言之,引用其中一篇文章:
sqlsrv驱动程序由微软构建、维护和支持`
和
mssql驱动程序是一个社区构建的驱动程序。
我不确定这个驱动程序是在多长时间内作为官方PHP扩展更新或维护的,但从PHP5.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 =dbo_logon(“数据库”=>$dbname);$dbh=sqlsrv_connect($dbserver,$connectionOptions);if(!$dbh){ die(“数据库连接错误”);return false;}返回$dbh;}
我认为这将适用于连接。请注意代码未经过测试。
发布于 2014-09-25 15:20:21
“sqlsrv驱动程序是由Microsoft`构建、维护和支持的。”现在2014年9月,还没有支持php 5.6的官方版本。最后一个官方版本是在2012年4月。MS style...
https://stackoverflow.com/questions/6297132
复制相似问题