為什麼我從 IIS 收到此 500 錯誤?
我在 Windows 7 Ultimate x64 上的 IIS 7.5 上執行 PHP 5.3.1。我一直在嘗試使用 ADODB 使 PHP 通過 ODBC 連接到我本地安裝的 SQL Server 2008 Express。起初我無法連接它,因為即使我將本地 SQL 伺服器添加為 ODBC 管理器中的伺服器 DSN,我仍然收到此錯誤:
[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application
我在 Stack Overflow 上詢問了這個問題並得到了答案。回想起來,我可能應該在這裡問這個問題,但我得到了答案,所以我不在乎。(另外,我絕對討厭三部曲網站一開始就被拆分的事實,但那是另一回事了……)
無論如何,在使用 %windir%\sysWOW64\odbcad32.exe 設置數據源之後,我似乎取得了一些進展。我不再收到上面列出的錯誤。相反,我得到了一個看似更邪惡的錯誤,即這個:
在我剛剛得到一個簡單的 PHP 異常之前。現在我的 PHP 腳本相當於段錯誤,因為它顯然掛斷了這個 64 位 ODBC 驅動程序。幫助!連接到 SQL Server 應該是一項相對簡單直接的任務,那麼我需要做什麼才能讓事情正常進行?
更新:我開始賞金,因為我真的需要盡快讓 SQL Server 和 PHP 相互交談。一位發帖人建議我檢查事件日誌,但沒有顯示任何內容,另一位發帖人建議我啟用失敗的請求跟踪,我已經這樣做了,但我不太確定它是否提供任何說明。可以在此處找到它提供的錯誤跟踪的副本(僅限 IE)。我還有這裡顯示的(非常基本的)PHP 腳本。我已將連接名稱更改為“MYCOMPUTER”,將特定數據庫/目錄的名稱更改為“MyDatabase”,並隱藏了密碼,但沒有進行其他更改。
一點背景:
- 我的電腦叫做 MYCOMPUTER(不是真的,但是這樣想)
- MYCOMPUTER 正在執行帶有 IIS 7.5 的 64 位 Windows 7 Ultimate
- MYCOMPUTER 安裝了 PHP 5.3.1(32 位),通過 FastCGI 處理
- MYCOMPUTER 已安裝 64 位 SQL Server Express 2008
- 預設 SQL 實例稱為 MYCOMPUTER\SQLEXPRESS
- 有一個名為 MyDatabase 的數據庫(同樣,名稱實際上不同)
- 有一個名為 MYCOMPUTER 的系統 DSN 設置(使用 32 位 ODBC 管理器設置)
- 有一個名為 MYCOMPUTER64 的系統 DSN 設置(使用 64 位 ODBC 管理器設置)
如果我嘗試在我連結到的那個腳本中連接到 MYCOMPUTER,我會得到那個可怕的 500 錯誤。如果我嘗試在同一個腳本中連接到 MYCOMPUTER64,我會收到上面列出的“架構不匹配”錯誤。無論哪種方式,它都不起作用。我需要它來工作。請幫忙。
我發現如果您在使用 IIS7 時以錯誤的方式查看 PHP+ODBC,它會給您一個通用的 500。獲得“0”的 500 錯誤非常有趣。
我有這種感覺,當您從 PHP 程式碼端執行此操作時,您正在從 OS/IIS 端處理此問題,這可能會導致我們更快地出錯(現在您已經解決了驅動程序問題)。
PHPInfo 是否按預期工作?
在引用的 PHP 腳本中,它在哪一行失敗了?如果你沒有其他辦法,只需將 PHP 標籤內的所有內容都註釋掉,看看它是否可以給你一個空白頁面;然後一次一個地取消註釋行和程式碼部分(最內層的嵌套),直到找到導致引發錯誤的部分。
由於您的測試腳本很短,它會很容易,並且希望它會指出接下來要檢查的內容。
HTH。