SQL Server无法连接或抛出错误

时间:2016-11-30 22:20:53

标签: php sql-server pdo sybase sqlsrv

我正在尝试连接到已经建立的数据库。我们没有访问后端,但我们确实有服务器地址和登录信息连接到它 - 去年我能够使用PDO和dblib连接,但PHP 7不再支持dblib我正在尝试使用sql server驱动程序。

我设置了一个基本的连接字符串来测试它,并没有得到任何指定的错误,也没有得到任何结果:

<?php
    //Display All Errors
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

    echo "Test1";

//Try the Connection
try {
    //Connection Variables
    $server = "11.123.123.123, 1234";
    $database = 'myDatabase';
    $username = "myUsername";
    $password = "myPassword";

    //Connection String
    $conn = new PDO ("sqlsrv:Server=$server;Database=$database","$username","$password");

    //Initiating Error Detection
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   
}  

//Catch exceptions to the Try
catch(Exception $e)  {   
    echo "Test3";
    die( print_r( $e->getMessage() ) );   
}  

//Prepare SQL Statement
$stmt = $conn->prepare("SELECT * FROM WorksheetPriceChangeData");

//Execute SQL Statement
$stmt->execute();
    while ($row = $stmt->fetch()) {
      print_r($row);
    }
    echo "Test4";
?>

(用于敏感信息的占位符)。此代码生成一个空页面,在顶部显示“Test1”回显。我的PHO日志中没有错误,phpinfo()显示sqlsrv PDO和sqlsrv扩展名(4.0.8629.3)是活动的,如果我使用虚假的服务器地址(如11.123.123.123),它也会做同样的事情。

我还要补充一点,我在Windows Server 2012 R2上,数据库显示在数据源管理员中。它已成功连接“使用网络登录ID进行Windows NT身份验证”,并选中“连接到SQL Server以获取其他配置选项的默认设置”。

我很感激为此提出任何指示或想法。即使没有错误消息或日志也很难继续。

亲切的问候, 本大卫

1 个答案:

答案 0 :(得分:1)

此连接适用于PHP 5.X-7.X中的Windows Server 2012 R2(在x86架构模式下运行的PHP版本)。

在IIS中进行全新安装时,您可能首先需要将PHP的版本更改为5.X或7.X(与我们正在使用的Sybase数据库握手时,x86架构版本的7.0是必需的)进入&gt; IIS管理器&gt; PHP管理器并选择&#34;更改PHP版本&#34;。在此之后,可能需要通过运行ODBC数据源32位可执行文件并创建名为&#34; myConnection&#34;的连接来创建ODBC DSN。 (如果名称不同,则需要在下面调整变量)。需要使用SQL Anywhere 12驱动程序创建此连接。需要使用与数据库凭据匹配的服务器名称和数据库名称创建连接。

接下来转到IIS管理器&gt;验证。选择&#34;匿名身份验证&#34;,点击&#34;编辑&#34;并确保&#34;应用程序池标识&#34;检查。

在此之后,您需要通过安装和启动odbc_pdo驱动程序/扩展来配置PHP以使用DSN。首先确保php_pdo_odbc.dll文件位于您正在使用的版本的主PHP目录下的/ ext目录中(确保您在&#34; Program Files(X86)&#34;文件夹中进行这些调整,或者你正在调整现在不活动的x64 PHP版本) - 或者如果它没有下载它。一旦文件在目录中,编辑主PHP目录中的php.ini文件,在文件末尾的扩展块中包含以下扩展行:extension = php_pdo_odbc.dll。重新启动计算机,现在应启用odbc_pdo驱动程序。以下连接脚本现在应该可以工作并打印该数据库的系统对象的数组样式。

    <?php       
        //---Display All Errors
        ini_set('display_errors', 1);
        ini_set('display_startup_errors', 1);
        error_reporting(E_ALL);

        echo "Boom! <br /><br />";

        //---Try the Connection
        try {

            //Connection Variables
            $dsn = "odbc:myConnection";
            $username = "myUsername";
            $password = "myPassword";

            //Connection String
            $conn = new PDO($dsn, $username, $password);

            //Initiating Error Detection
            $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   
        }

        //---Catch exceptions to the Try
        catch(Exception $e)  {   
            echo "Invalid Connection";
            //Print Error Messages
            die( print_r( $e->getMessage() ) );   
        }  

        //---SQL Statement(s)
        $stmt = $conn->prepare("SELECT * FROM sysobjects WHERE type = 'U'");

        //---Execute SQL Statement
        $stmt->execute();
            while ($row = $stmt->fetch()) {
              print_r($row);
                echo "<br />";
            }

        echo "<br />Connected Successfully";
    ?>