sqlsrv_connect尝试没有成功或失败

时间:2016-10-30 15:59:25

标签: php sql-server pdo xampp sqlsrv

我尝试通过PHP7 sqlsrv驱动程序连接到MS SQL Server。 看起来我的浏览器试图执行:

$conn = new PDO( "sqlsrv:Server=$serverName;Database=mydb", $uname, $pass);  

$conn = sqlsrv_connect( $serverName, $connectionInfo);  
它只是挂起。没有收到成功或失败的回声/骰子消息。相反,我的浏览器中的滚轮一直在旋转,状态消息是"等待localhost"。它似乎也没有超时。我等了10多分钟,连接永远不会失败/成功。

完整代码(我已尝试过程序和PDO方法):

<?php

//
$serverName = "myserver\myinstance"; //serverName\instanceName
$uname = "myuser";
$pass = "mypass";
$connectionInfo = array( "Database"=>"mydb", "UID"=>$uname, "PWD"=>$pass);

/*Procedural sqlsrv method

$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
     echo "Connection established.<br />";
     die("DONE");
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
*/

/*PDO sqlsrv method*/  
try {  
    $conn = new PDO( "sqlsrv:Server=$serverName;Database=mydb", $uname, $pass);  
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    die("success!");
} catch(PDOException $e) {   
    die($e->getMessage());   
}

?>

设置详情和其他信息:

  • 我正在使用XAMPP。
  • Windows 7 x64
  • PHP 7.0.9
  • 我尝试在Windows NT计算机上连接到Microsoft SQL Server版本10.50.6220.0的实例
  • 我需要通过SQL Server身份验证授权 - 而不是Windows授权
  • 我能够使用Microsoft SQL Server Management Studio和其他工具(FME Workbench)成功连接到数据库
  • 服务器是远程的,但正在接受远程连接(通过SSMS验证)

我之前遇到过&#34;未定义函数sqlsrv_connect()&#34;直到我安装

php_sqlsrv_7_ts_x86.dll

php_pdo_sqlsrv_7_ts_x86.dll

进入我的php / ext文件夹并更新了php.ini。当我打开phpinfo时,我在&#34;注册的PHP Streams&#34;中看到了sqlsrv。和#34; PDO驱动程序&#34;字段。

我应该怎样做才能获得成功的连接或获取有关我的连接尝试未成功/失败的原因的更多信息?

编辑: 我已切换到XAMPP(PHP 5.6.24)。我现在可以通过CLI连接到SQL Server,但无法通过PHP-CGI连接(通过浏览器/由Apache HTTPD提供)。我已经通过php_info()再次验证sqlsrv和PDO扩展已成功加载。我现在正在浏览PHP-CGI和PHP CLI之间的差异,看看可能导致问题的原因。

编辑: 我现在使用IIS而不是Apache,并且能够通过sqlsrv连接而不会出现问题。不是解决方案,而是解决问题的方法。

1 个答案:

答案 0 :(得分:0)

尝试:

try {
    $db = new PDO( 'sqlsrv:server=serwer_name;Database=database_name', 'user', 'password'); 
} catch (PDOException $e) {            
    echo $e->getMessage();   
}