1
<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 がチェックされています。また、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 を設定する必要があります。任意の Web サーバー (IIS 以外) で php を CGI として実行している場合。セキュリティの問題については、ドキュメントを参照してください。別の方法は、; を使用することです。以下の cgi.force_redirect 設定。/ http://php.net/doc-root doc_root =

; /~username のみを使用して PHP がスクリプトを開くディレクトリ。空でない場合。; / http://php.net/user-dir user_dir =

; ロード可能な拡張機能 (モジュール) が存在するディレクトリ。; / http://php.net/extension-dir ; extension_dir = "./" ; Windows の場合: ; 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 サーバー。未定義のままにすると、PHP はデフォルトでこれをオンにします。あなたはできる ; ここでオフにする場合は、自己責任で行ってください。IIS ではこれを安全にオフにすることができますが、実際にはオフにする必要があります。; / http://php.net/cgi.force-redirect ;cgi.force_redirect = 1

; cgi.nph が有効になっている場合、cgi は常に Status: 200 with ; を送信するように強制されます。すべてのリクエスト。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 は、CGIの実際の PATH_INFO/PATH_TRANSLATED サポートを提供します。PHP ; 以前の動作は PATH_TRANSLATED を SCRIPT_FILENAME に設定し、 grok ではありませんでした。PATH_INFO とは何か。PATH_INFO の詳細については、cgi 仕様を参照してください。設定; これを 1 にすると、PHP CGI はそのパスを仕様に準拠するように修正します。設定; ゼロを指定すると、PHP は以前と同じように動作します。デフォルトは 1 です。スクリプトを修正する必要があります。PATH_TRANSLATED ではなく SCRIPT_FILENAME を使用します。; / http://php.net/cgi.fix-pathinfo ;cgi.fix_pathinfo=1

; IIS (WINNT ベースの OS) の下の FastCGI は、偽装する機能をサポートしています。呼び出し元クライアントのセキュリティ トークン。これにより、IIS は ; を定義できます。リクエストが実行されるセキュリティ コンテキスト。Apache の下の mod_fastcgi ; は現在この機能をサポートしていません (2002 年 3 月 17 日)。IIS で実行している場合は 1 に設定します。デフォルトはゼロです。; / http://php.net/fastcgi.impersonate ;fastcgi.impersonate = 1;

; FastCGI 接続によるロギングを無効にします。PHP のデフォルトの動作は enable です。この機能。;fastcgi.logging = 0

; cgi.rfc2616_headers 構成オプションは、PHP にどのタイプのヘッダーを送信するかを指示します。HTTP 応答コードを送信するときに使用します。0 に設定されている場合、PHP は Status: ヘッダーを送信します。Apache でサポートされています。このオプションが 1 に設定されている場合、PHP は送信します。RFC2616 準拠のヘッダー。; デフォルトはゼロです。; / http://php.net/cgi.rfc2616-headers ;cgi.rfc2616_headers = 0

;;;;;;;;;;;;;;; ; ファイルのアップロード ; ;;;;;;;;;;;;;;;

; HTTP ファイルのアップロードを許可するかどうか。; / http://php.net/file-uploads file_uploads = オン

; 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 に保存されています。

4

3 に答える 3

1

私は同じ問題を抱えていましたが、解決策は非常に簡単です。MS SQL Server 用の PHP 5.3 のデフォルト ドライバーは、Windows では動作しなくなりました。Microsoft は、使用できるドライバーをリリースしました。ドライバーにはドキュメントが付属しています。

ダウンロードできるリンクは次のとおりです: http://sqlsrvphp.codeplex.com/

いくつかのドキュメントを見つけることができるリンクは次のとおりです: http://msdn.microsoft.com/en-us/library/cc296172(SQL.90).aspx

于 2010-05-30T19:56:06.013 に答える
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;
    }

}
?>

完璧ではありませんが、私にとってはうまくいきます

于 2010-07-13T14:52:35.543 に答える
0

おそらく、php は C:\windows\php.ini のような別の ini ファイルを使用しています。

于 2010-02-26T20:13:32.837 に答える