![](/img/trans.png)
[英]Why I can't connect to a MySQL 5.3.36 shared server using mysqli_connect and PHP 7.4, but it will work using php 7.1?
[英]PHP 7.1.x - mysqli_connect Isn't Defined (Extension is turned on)
我在Windows 10計算機上安裝了WAMP Server(3.0.6)。 我正在使用一些自定義MySQL表開發WordPress網站,因此我在使用$wpdb
。
我在PHP 7.0.10上運行,一切都很好。 今天早上,我安裝了PHP 7.1.4,突然出現了這個錯誤:
致命錯誤:未捕獲錯誤:在... \\ wp-includes \\ wp-db.php:1573中調用未定義的函數mysql_connect()
我對其進行了研究,並將問題追溯到__construct()
函數,以及以下if
語句:
if ( function_exists( 'mysqli_connect' ) ) {
var_dump告訴我function_exists( 'mysqli_connect' )
返回false
。
問題不在於我沒有啟用mysqli
擴展名:
我已切換回7.0.x(錯誤消失了),刪除了7.1.4,重新安裝了7.1.4,然后又切換回了它。 它仍然不起作用。
我嘗試了7.1.0,但它不起作用。
我試圖打開和關閉擴展名,並且什么都沒有改變。
我試圖將實際的php_mysqli.dll
文件從工作的7.0.10目錄復制到7.1.4目錄中,但這是行不通的。
編輯
根據請求,我添加了phpinfo()
顯示的屏幕截圖。 在7.0以下,我看到mysqli的info部分,而在7.1下,則缺少該部分。
首先,介紹一下WAMPServer處理php.ini
文件的方式。 如果使用phpinfo()
,您可能會注意到,已加載的ini
文件的路徑不是 PHP安裝中的ini
文件。 相反,它指向Apache安裝。
但是,如果您看一下,它是一個0KB
符號鏈接。 實際上是在PHP安裝中指向ini
文件的鏈接。 但這不是php.ini
,而是指向phpForApache.ini
。 所以這:
...\wamp64\bin\apache\apache2.4.23\bin\php.ini
實際上是
...\wamp64\bin\php\php[VERSION]\phpForApache.ini
因此,您可以忽略Apache文件夾中的內容,而專注於PHP文件夾中的ini
文件。 但是,您不能忽略php.ini
。 您需要更正兩個。
喬恩·斯特林 ( Jon Stirling)建議在phpInfo()
檢查已加載的配置文件, phpInfo()
。
我從PHP網站安裝了PHP 7.1,卻忘記了從7.0的安裝轉移我的ini
文件。 我改用PHP網站提供的默認ini
文件。
那是行不通的,因為要使PHP與WAMP一起使用, ini
文件中需要進行一些調整。 因此,我從7.0.x文件夾中復制了兩個ini
文件,然后它開始正常工作,除了mysqli錯誤。
經過一個小時的摸爬滾 , 弗雷德-ii-的最后一個問題終於使我得到了答案。 我讓PHP嘗試引用舊的擴展文件。 原因如下:
WAMP提供的php.ini
文件和phpForApache.ini
文件都對一些路徑進行了硬編碼。 例如,PHP 7.0.10的extensions文件夾路徑編碼為:
extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"
我已經復制了ini
文件,但是它們指向的是7.0的擴展文件夾。 7.0.x的dll
文件不適用於7.1.x。
我進入了PHP 7.1.4文件夾中的兩個文件( php.ini
phpForApache.ini
),並全局將文本“ 7.0.10”的所有實例替換為“ 7.1.4”。 現在一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.