调试PHP ADODB.Connection

调试PHP ADODB.Connection,php,com,adodb,Php,Com,Adodb,我在通过库用PHP连接MS SQL2000时遇到问题。 我得到的信息是: 无法建立数据库连接异常“com_异常” 带有消息“来源:用于ODBC驱动程序的Microsoft OLE DB提供程序” 描述:[Microsoft][ODBC SQL Server驱动程序][DBMSLPN]SQL Server 不存在或访问被拒绝 我已经阅读了很多文章,但找不到任何直接的示例来说明如何设置PHP以便轻松连接。以下是我迄今为止采取的步骤: 1在启用TCP/IP和命名管道的情况下运行MSSQLS2000,侦

我在通过库用PHP连接MS SQL2000时遇到问题。 我得到的信息是:

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

我已经阅读了很多文章,但找不到任何直接的示例来说明如何设置PHP以便轻松连接。以下是我迄今为止采取的步骤:

1在启用TCP/IP和命名管道的情况下运行MSSQLS2000,侦听端口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
我已经查过了 5我确信我为连接字符串提供了正确的数据库/实例、用户名和密码。 6当我使用以下命令实例化COM对象时:

$connection = new COM("ADODB.Connection");
print_r($connection);
…我得到com对象输出响应,这意味着该类似乎工作正常

我忽略了什么?我必须通过ADODB连接,因为我正在工作的整个网站都是建立在ADODB上的。有办法调试这个吗?感谢您的帮助。

问题已解决

经过几天的研究和重新安装,包括Apache、不同的PHP和MSSQL版本,我发现了以下内容。我并不是说这是最好的解决方案,但它是有效的:

功能环境:

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

2 Apache 2.2 PHP 5.3.28-安装程序:PHP-5.3.28-Win32-VC9-x86.msi下载自:

我列出了所有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扩展包从以下位置下载:

从下载的扩展名=php\u com\u dotnet.dll:无法验证此文件的安全性,但它可以工作

MSSQL 2012需要设置如下:

创建数据库时,打开ManagementStudio并右键单击左侧树中的数据库实例。确保在属性->安全选项卡下选择:SQL Server和Windows身份验证模式。如果您使用的是标准用户名/密码方法,则没有此选项,您将永远无法连接

然后继续创建数据库架构,并在主安全选项卡下使用与此数据库相关的用户名/密码创建新用户。确保您设置了所有权限,即:所有者、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();