【问题标题】:Debugging PHP ADODB.Connection调试 PHP ADODB.Connection
【发布时间】:2014-01-15 16:14:21
【问题描述】:

我无法通过COM 库使用 PHP 连接到 MS SQL2000。 我收到的信息是:

无法建立数据库连接异常“com_exception” 带有消息“来源:用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序” 说明:[Microsoft][ODBC SQL Server 驱动程序][DBMSLPCN]SQL Server 不存在或拒绝访问.....

我已经阅读了很多帖子,但找不到任何直接示例如何设置 PHP 以便轻松连接。这些是我到目前为止所采取的步骤:

1) 在启用 TCP/IP 和命名管道的情况下运行 MSSQL2000,监听端口 1433 2) 安装 PHP 版本 5.4.16 TS 3) 我启用了以下扩展(与 mssql 相关):

extension=php_com_dotnet.dll
extension=php_pdo_sqlsrv_53_ts_vc9.dll
extension=php_sqlsrv_53_ts_vc9.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll

4) 我检查了COM windows permissions 5) 我确定我为连接字符串提供了正确的数据库/实例、用户名、密码。 6)当我实例化 COM 对象时:

$connection = new COM("ADODB.Connection");
print_r($connection);

...我得到 "com Object" 输出响应,这意味着该类似乎工作正常。

我忽略了什么?我必须通过 ADODB 进行连接,因为我正在处理的整个站点都是建立在它之上的。有没有办法调试这个?任何帮助表示赞赏。

【问题讨论】:

    标签: php com adodb


    【解决方案1】:

    问题解决了!

    经过几天的解决并重新安装了几乎所有东西,包括 Apache、不同的 PHP 和 MSSQL 版本,我想出了以下内容。我并不是说这是最好的解决方案,但它确实有效:

    功能环境:

    1) 带有 MSSQL 2012 的 Windows Azure 服务器

    2) Apache 2.2 PHP 5.3.28 - 安装程序:php-5.3.28-Win32-VC9-x86.msi 下载自: http://windows.php.net/download/

    PHP 扩展(我列出了所有但你只需要最后几个):

    [PHP_BZ2]
    extension=php_bz2.dll
    [PHP_CURL]
    extension=php_curl.dll
    [PHP_ENCHANT]
    extension=php_enchant.dll
    [PHP_FILEINFO]
    extension=php_fileinfo.dll
    [PHP_GD2]
    extension=php_gd2.dll
    [PHP_GETTEXT]
    extension=php_gettext.dll
    [PHP_GMP]
    extension=php_gmp.dll
    [PHP_IMAP]
    extension=php_imap.dll
    [PHP_INTL]
    extension=php_intl.dll
    [PHP_LDAP]
    extension=php_ldap.dll
    [PHP_MBSTRING]
    extension=php_mbstring.dll
    [PHP_MYSQL]
    extension=php_mysql.dll
    [PHP_MYSQLI]
    extension=php_mysqli.dll
    [PHP_OCI8]
    extension=php_oci8.dll
    [PHP_OCI8_11G]
    extension=php_oci8_11g.dll
    [PHP_OPENSSL]
    extension=php_openssl.dll
    [PHP_PDO_MYSQL]
    extension=php_pdo_mysql.dll
    [PHP_PDO_OCI]
    extension=php_pdo_oci.dll
    [PHP_PDO_ODBC]
    extension=php_pdo_odbc.dll
    [PHP_PDO_PGSQL]
    extension=php_pdo_pgsql.dll
    [PHP_PDO_SQLITE]
    extension=php_pdo_sqlite.dll
    [PHP_PGSQL]
    extension=php_pgsql.dll
    [PHP_SHMOP]
    extension=php_shmop.dll
    [PHP_SNMP]
    extension=php_snmp.dll
    [PHP_SOAP]
    extension=php_soap.dll
    [PHP_SOCKETS]
    extension=php_sockets.dll
    [PHP_SQLITE]
    extension=php_sqlite.dll
    [PHP_SQLITE3]
    extension=php_sqlite3.dll
    [PHP_SYBASE_CT]
    extension=php_sybase_ct.dll
    [PHP_TIDY]
    extension=php_tidy.dll
    [PHP_XMLRPC]
    extension=php_xmlrpc.dll
    [PHP_XSL]
    extension=php_xsl.dll
    [PHP_EXIF]
    extension=php_exif.dll
    
    php_sqlsrv_53_ts_vc9.dll
    php_pdo_sqlsrv_53_ts_vc9.dll
    extension=php_com_dotnet.dll
    

    php_pdo_sqlsrv_53_ts_vc9.dll 扩展包下载自:http://www.microsoft.com/en-us/download/details.aspx?id=20098

    extension=php_com_dotnet.dll 下载自: http://originaldll.com/file/php_com_dotnet.dll/29343.html(无法验证此文件的安全性,但它可以工作)

    MSSQL 2012需要设置如下:

    创建数据库时,打开管理工作室并右键单击左侧树中的数据库实例。确保在 properties->security 选项卡下选择:“SQL Server 和 Windows 身份验证模式”。如果您使用标准的用户名/密码方法,那么您将永远无法连接。

    然后继续创建数据库架构,并在主安全选项卡下使用与此数据库相关的用户名/密码创建新用户。确保您设置了所有权限,即:owner、datareader、datawriter

    我使用的PHP连接脚本如下: *=============================================== =*

    function openConnection() { 
    
            $dbaseServer = "instance name";
            $dbaseIp = "127.0.0.1";
            $dbasePort = "1433";
            $dbaseName = "databsse name";
            $dbaseUser = "username";
            $dbasePassword = "password";                
    
            $connectionString = ""
            ."Driver={SQL Server};"
            ."Network=DBMSSOCN;"
            ."Server=$dbaseServer;"
            ."Address=$dbaseIp:$dbasePort;"
            ."Database=$dbaseName;"
            ."Uid=$dbaseUser;"
            ."Pwd=$dbasePassword";
    
    
        try {
    
            $connection = new COM("ADODB.Connection");      
            $connection->ConnectionTimeout = 60;
            $connection->Open($connectionString);
    
            return $connection;
    
        } catch (exception $e) {
    
                echo "Could not connect - $e";
                exit;
    
        }
    
    }
    
    // test query
    //===========
    
    $sql = "SELECT * FROM [dbname].[dbo].[tablename]";
    
            $connection = openConnection();
    
                // unnecessary but in my case more time is needed.      
            $connection->CommandTimeout = 240;
    
            $recordset = $connection->Execute($sql);
    
            if (!$recordset) { $connection->Close(); die("Request failed!"); }
    
            if (!$recordset->EOF) {
    
                    while (!$recordset->EOF) {
    
                    $test[] = $recordset[0]->value;             
    
                    $recordset->MoveNext();
    
                    }
    
            }
    
        print_r($test);
    
        $connection->Close(); 
    

    --

    我想就是这样。请随时纠正我的帖子和/或改进它:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多