在Php中连接到SQL Server - 扩展错误

时间:2010-02-26 19:49:01

标签: php sql-server wampserver

<html>
    <head>
        <title>Connecting </title>
    </head>
    <body>
        <?php
    $host = "*.*.*.*";
 $username = "xxx";
 $password = "xxx";
 $db_name = "xxx";

    $db = mssql_connect($host, $username,$password)
    or die("Couldn't Connect");
 $selected = mssql_select_db($db_name, $db)
 or die("Couldn't open database");

?>
    </body>
</html>

我的错误信息是:

  

致命错误:在第12行的C:\ wamp \ www \ php \ dbase.php中调用未定义的函数mssql_connect()

我在Php 5.3.0上使用WampServer 2.0

当我检查扩展时,php_mssql是Checked。我还检查了php.ini文件以确保它没有被注释掉。

我的文件dbase.php保存在C:\ wamp \ www \ php中。我试过停止服务,关闭所有内容,然后再次运行它。我知道问题是扩展文件没有以某种方式包含在内。

以下内容是从我的php.ini文件中复制的。 注意我制作了所有http = / http以避免发布链接。

  

;;;;;;;;;;;;;;;;;;;;;;;;; ;路径   和目录;   ;;;;;;;;;;;;;;;;;;;;;;;;;

     

UNIX:“/ path1:/ path2”; include_path   =“。:/ php / includes”; Windows:“\ path1; \ path2”include_path =   “C:\ wamp \ bin \ php \ php5.3.0 \ ext”; ;   PHP的include_path默认设置   是“。; / path / to / php / pear”;   / http://php.net/include-path

     

PHP页面的根目录,仅供使用   如果不是空的话。 ;如果PHP没有编译   使用FORCE_REDIRECT,你应该设置   doc_root;如果你正在运行PHP作为   任何Web服务器下的CGI(除了   IIS);请参阅安全性文档   的问题。替代是使用;   cgi.force_redirect配置如下   ; / http://php.net/doc-root doc_root =

     

PHP打开的目录   该脚本仅使用/ ~username   ;如果不是空的话。 ;   / http://php.net/user-dir user_dir =

     

可加载的目录   扩展(模块)驻留。 ;   / http://php.net/extension-dir;   extension_dir =“./”;在窗户上:;   extension_dir =“ext”extension_dir =   “C:/wamp/bin/php/php5.3.0/ext /”

     

是否启用dl()   功能。 dl()函数没有   工作;适当的多线程   服务器,如IIS或Zeus,是   自动禁用他们。 ;   / http://php.net/enable-dl enable_dl =   关

     

cgi.force_redirect是必要的   提供运行PHP作为CGI的安全性   在;大多数Web服务器。剩下   undefined,PHP将其打开   默认。您可以 ;把它关掉   由您自担风险; 你可以放心   事实上,你为IIS关闭了这个   必须。;   / http://php.net/cgi.force-redirect   ; cgi.force_redirect = 1

     

如果启用了cgi.nph,它将强制执行   cgi总是发送状态:200带;   每一个要求。 PHP的默认行为   是禁用此功能。 ; cgi.nph =   1

     

如果cgi.force_redirect已打开,   而且你没有在Apache下运行   或Netscape; (iPlanet)Web服务器,   你可能需要设置一个环境   PHP的变量名;会寻找   要知道继续下去是可以的   执行。设置此变量可以   ;导致安全问题,知道你是什么   正在做的第一个。 ;   / http://php.net/cgi.redirect-status-env   ; cgi.redirect_status_env =;

     

cgi.fix_pathinfo提供真实   PATH_INFO / PATH_TRANSLATED支持   CGI。 PHP的;以前的行为是   将PATH_TRANSLATED设置为   SCRIPT_FILENAME,而不是grok;   PATH_INFO是什么。更多   有关PATH_INFO的信息,请参阅cgi   眼镜。设置 ;这将导致1   PHP CGI修复其符合的路径   规范。一个设定;零原因   PHP表现得像以前一样。默认是   你应该修复你的脚本;使用SCRIPT_FILENAME而不是   PATH_TRANSLATED。 ;   / http://php.net/cgi.fix-pathinfo   ; cgi.fix_pathinfo = 1

     

IIS下的FastCGI(基于WINNT   OS)支持的能力   冒充;安全令牌   打电话给客户这允许IIS   定义;安全上下文即   请求运行。 mod_fastcgi下   阿帕奇;目前不支持   此功能(03/17/2002);设为1   如果在IIS下运行。默认是   零。 ;   / http://php.net/fastcgi.impersonate   ; fastcgi.impersonate = 1;

     

禁用通过FastCGI的日志记录   连接。 PHP的默认行为是   启用 ;此功能。   ; fastcgi.logging = 0

     

cgi.rfc2616_headers配置   选项告诉PHP什么类型的标头   至 ;发送HTTP响应时使用   码。如果设置为0 PHP发送状态:   标题;由Apache支持。   当此选项设置为1时,PHP将会   发送; RFC2616兼容标头。 ;   默认值为零。 ;   / http://php.net/cgi.rfc2616-headers   ; cgi.rfc2616_headers = 0

     

;;;;;;;;;;;;;;;; ;文件上传;   ;;;;;;;;;;;;;;;;

     

是否允许HTTP文件上传。   ; / http://php.net/file-uploads   file_uploads = On

     

HTTP的临时目录   上传的文件(将使用系统   否则默认;指定)。 ;   / http://php.net/upload-tmp-dir   upload_tmp_dir =“c:/ wamp / tmp”

     

上传的最大允许大小   文件。 ;   / http://php.net/upload-max-filesize   upload_max_filesize = 2M

另外,我的php.ini文件保存在:C:\ wamp \ bin \ apache \ Apache2.2.11 \ bin

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,解决方案非常简单。 PHP 5.3中用于MS SQL Server的默认驱动程序在Windows中不再起作用。 Microsoft已发布了可以使用的驱动程序。驱动程序附带文档。

以下是可以找到下载内容的链接:http://sqlsrvphp.codeplex.com/

以下是您可以找到一些文档的链接:http://msdn.microsoft.com/en-us/library/cc296172(SQL.90).aspx

答案 1 :(得分:0)

也许php正在使用另一个像C:\ windows \ php.ini这样的ini文件,它过去发生在我身上:)

答案 2 :(得分:0)

好吧,因为你使用的是PHP 5.3,使用PDO对象会没有意义吗?像这样:

<?php

class DatabaseConn {

    static function createNewMySQLConnection() {

        try {
            $conn = new PDO("mysql:dbname=" . MYSQL_DB_DATA . "; host=" . MYSQL_DB_HOST, MYSQL_DB_USER, MYSQL_DB_PASS);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            $x = new MyException("Failed to connect to db: " . $e->getMessage());
            $x->errorMessage();
            return null;
        }

        $conn->beginTransaction();

        return $conn;
    }

    static function createNewPgSQLConnection() {

        try {
            $conn = new PDO("pgsql:dbname=" . PGSQL_DB_DATA . "; host=" . PGSQL_DB_HOST, PGSQL_DB_USER, PGSQL_DB_PASS);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            $x = new MyException("Failed to connect to db: " . $e->getMessage());
            $x->errorMessage();
            return null;
        }

        $conn->beginTransaction();

        return $conn;
    }

    static function createNewMsSQLConnection() {

        try {
            $conn = new PDO("dblib:dbname=" . MSSQL_DB_DATA . "; host=" . MSSQL_DB_HOST, MSSQL_DB_USER, MSSQL_DB_PASS);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            $x = new MyException("Failed to connect to db: " . $e->getMessage());
            $x->errorMessage();
            return null;
        }

        $conn->beginTransaction();

        return $conn;
    }

    static function runExecute($conn, $query) {

        try {

            $stmt = $conn->prepare($query->sql);
            if (isset($query->input) && !is_null($query->input)) {
                $stmt->execute($query->input);
                return true;
            } else {
                $stmt->execute();
                return true;
            }
        } catch (PDOException $e) {

            if (isset($query->input)) {

                $inputs = "";
                foreach ($query->input as $i) {
                    $inputs .= "'" . $i . "' ";
                }
                $msg = "$query->sql with input(s) $inputs. statement failed, rolling back: " . $e->getMessage();
            } else {
                $msg = "$query->sql . statement failed, rolling back: " . $e->getMessage();
            }
            $x = new MyException($msg);
            $x->errorMessage();
        }
        return false;
    }

    static function runPreparedQuery($conn, $query) {

        $results = null;
        try {
            $stmt = $conn->prepare($query->sql);
            if (isset($query->input) && !is_null($query->input)) {
                $stmt->execute($query->input);
            } else {
                $stmt->execute();
            }
            $results = $stmt->fetchAll();
        } catch (PDOException $e) {

            if (isset($query->input)) {

                $inputs = "";
                foreach ($query->input as $i) {
                    $inputs .= "'" . $i . "' ";
                }
                $msg = "$query->sql with input(s) $inputs. statement failed, rolling back: " . $e->getMessage();
            } else {

                $msg = "$query->sql . statement failed, rolling back: " . $e->getMessage();
            }

            $x = new MyException($msg);
            $x->errorMessage();

            return null;
        }

        return $results;
    }

    static function getLastInsertId($conn) {
        return $conn->lastInsertId();
    }

    static function closeConn($conn, $commit) {

        if ($commit) {
            $conn->commit();
        } else {
            $conn->rollBack();
        }

        $conn = null;
    }

}
?>

它并不完美但它对我有用