2012-12-04 58 views
3

我有MSSQL Server 2008中,微軟的Windows Server 2008 RC2和PHP 5.4PHP IIS7 MSSQL調用未定義功能sqlsrv_connect

php.info都行

[PHP_PDO_SQLSRV_54_NTS] 
extension=php_pdo_sqlsrv_54_nts.dll 
[PHP_PDO_ODBC] 
extension=php_pdo_odbc.dll 
[PHP_SYBASE_CT] 
extension=php_sybase_ct.dll 
[PHP_SQLSRV_54_NTS] 
extension=php_sqlsrv_54_nts.dll 

PHP的信息在這裏找到http://89.111.180.28/index.php

我看到與擴展的php.ini線,但我沒有看到在php.info擴展SQLSRV線...

用於連接到MSSQL服務器I使用腳本

$conn_array = array (
      "UID" => "user", 
      "PWD" => "passw", 
      "Database" => "database", 
      "Encrypt" => 1, 
      "TrustServerCertificate" => 1) ; 

$conn2 = sqlsrv_connect('localhost' , $conn_array); 

if ($conn2) 
    { 
     echo 'MSSQL Connection successful'; 
    } 
else 
    { 
     die(print_r(sqlsrv_errors(), true)); 
    } 

sqlsrv_close($conn2); 

但我看到的錯誤:

Fatal error: Call to undefined function sqlsrv_connect() in C:\inetpub\wwwroot\89.111.180.28\index.php on line 18 

請告訴我爲什麼我有錯誤,以及如何作出正確的?

p.s .:服務器已重新啓動。

+1

您確實下載了'SQLSRV30.EXE'文件,對吧? http://www.microsoft.com/en-us/download/details.aspx?id=20098 –

+0

@RocketHazmat是的,我安裝了這個 –

回答

0

我瞭解情況。

我使用的是5.4以上的PHP版本,所以使用Windows 3.0的PHP驅動。

對於此配置,2012的SQL所需的客戶端版本,但我已在客戶端SQL 2008版本

問題解決了。

1

你的答案肯定幫助我調試我的問題。爲了給其他已成功安裝PHP PDO SQLSRV .dll模塊的其他人解答此問題,但仍然會得到相同的錯誤。

我花了將近一個小時才弄清楚了這一點,但即使配置了PHP_PDO_SQLSRV,函數sqlsrv_connect()仍然無效。

發現這是因爲如果您使用的是PDO sqlsrv擴展名,它具有自己的具有單獨函數的庫。

要連接到數據庫,你會做這樣的事情:

$conn = new PDO("sqlsrv:Server=localhost;Database=testdb", "UserName", "Password");

你可以在這裏查看所有的人:

http://msdn.microsoft.com/en-us/library/ff628159(v=sql.105).aspx

如果您不確定PDO之間的差異和正常的SQLSRV,請參考這篇文章:

SQLSRV driver vs. PDO driver for PHP with MS SQL Server

我選擇PDO是因爲我更喜歡將數據作爲字符串返回(更快地訪問我而不是解析對象/類類型)。

2

我自己只是有這個問題。我終於搞定了,所以我想我會分享。


的問題是,雖然我已經安裝了SQLSRV DLL(複製到我的PHP/ext文件夾),我有它在我的php.ini在IIS添加,,這是「禁用'

下面是一些分步說明,以防再次出現同樣的問題。 (或者我將來參考:))

  1. Download (and install) the SQL Server drivers文件(.dll)

    • 通過運行.exe文件,然後鍵入路徑PHP擴展文件夾中安裝他們,當它要求你在哪裏解壓縮它們。
      • 要找到您當前的擴展目錄,請運行(cmd.exe)php -i | more,然後查找行extension_dir。 (對我來說,這是在第四次按more)。或者,製作一個僅包含<?php phpinfo(); ?>的簡單php文件,然後在瀏覽器中運行它。這將給出相同的信息,但是以更容易閱讀的格式。
  2. 擴展添加到php.ini

    • 要找到合適的php.ini中,無論是再次運行php -i | more,尋找Loaded Configuration File,或再次檢查簡單的PHP腳本(我強烈建議你做到這一點 - 它會爲你節省時間和精力)。您在那裏找到的路徑是您需要編輯的文件。
    • 以下行添加到你的php.ini文件,並將其保存:

      [PHP_SQLSRV] extention=php_sqlsrv_56_nts.dll

  3. 啓用IIS管理器

    • 擴展在開始菜單,鍵入IIS Manager ,然後按回車。在左側邊欄
    • 點擊PHP Manager
    • PHP Extensions
    • 點擊你的服務器的名稱,單擊Enable or Disable an Extension
    • 如果您的分機不在Enabled下,請在Disabled下查找。找到它後,右鍵單擊它,然後在出現的上下文菜單中單擊Enable
  4. 測試,以確保它的工作

    • 打開該頁面phpinfo()你做(你做了,是不是?),並Registered PHP Streams下看。如果您在該列表中看到sqlsrv,則表示已設置!
+0

如果你必須改變任何東西使它工作,留下評論說你做了什麼,對後來的人有幫助。 – Cullub

+1

注意:我還必須安裝[Microsoft®ODBC Driver 11](https://www.microsoft.com/en-us/download/details.aspx?id=36434)。 – Cullub

相關問題