Подключение к SQL Server в Php - расширение Err - PullRequest
1 голос
/ 26 февраля 2010
<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>

Мое сообщение об ошибке:

Неустранимая ошибка: вызов неопределенной функции mssql_connect () в C: \ wamp \ www \ php \ dbase.php в строке 12

Я использую WampServer 2.0 на Php 5.3.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 is ".; / path / to / php / pear"; / http://php.net/include-path

; Корень страниц PHP, используется только если не пусто ; если PHP не был скомпилирован с FORCE_REDIRECT вы ДОЛЖНЫ установить doc_root; если вы используете PHP как CGI под любым веб-сервером (кроме IIS); см документацию для безопасности проблемы. Альтернативой является использование; Конфигурация cgi.force_redirect ниже ; / http://php.net/doc-root doc_root =

; Каталог, в котором открывается PHP скрипт, использующий только имя пользователя / ~ ; если не пусто ; / 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 под ; большинство веб-серверов. Оставил неопределенный, 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) веб-серверы, Вы МОЖЕТЕ установить обстановку имя переменной, что PHP; буду искать знать, что нормально продолжать выполнение. Установка этой переменной МОЖЕТ ; вызвать проблемы безопасности, ЗНАЙТЕ, ЧТО ВЫ ДЕЛАЮТ ПЕРВЫМИ. ; / http://php.net/cgi.redirect-status-env ; cgi.redirect_status_env =;

; cgi.fix_pathinfo предоставляет real Поддержка PATH_INFO / PATH_TRANSLATED для CGI. PHP; предыдущее поведение было установить PATH_TRANSLATED в SCRIPT_FILENAME, и чтобы не грок; что такое PATH_INFO Для большего информация о PATH_INFO, см. CGI спецификации. Настройка; это к 1 вызовет PHP CGI, чтобы исправить его пути, чтобы соответствовать спецификация Настройка; нулевых причин PHP вести себя как раньше. По умолчанию 1. Вы должны исправить свои скрипты; использовать SCRIPT_FILENAME вместо PATH_TRANSLATED. ; / http://php.net/cgi.fix-pathinfo ; Cgi.fix_pathinfo = 1

; FastCGI под IIS (на основе WINNT ОС) поддерживает возможность подражать; жетоны безопасности звонящий клиент. Это позволяет IIS определить; контекст безопасности, что запрос работает под. mod_fastcgi под Апач; в настоящее время не поддерживает эта функция (17.03.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 ]

1 голос
/ 30 мая 2010

У меня была такая же проблема, и решение довольно простое. Драйвер по умолчанию в PHP 5.3 для MS SQL Server больше не работает в Windows. Microsoft выпустила драйвер, который вы можете использовать. Драйвер поставляется с документацией.

Вот ссылка, по которой можно скачать: http://sqlsrvphp.codeplex.com/

Вот ссылка, по которой можно найти документацию: http://msdn.microsoft.com/en-us/library/cc296172(SQL.90).aspx

0 голосов
/ 13 июля 2010

Ну, так как вы используете 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;
    }

}
?>

Это не идеально, но у меня работает

0 голосов
/ 26 февраля 2010

Возможно, php использует другой ini-файл, такой как C: \ windows \ php.ini, это случалось со мной в прошлом:)

...