Call to undefined function mysql_connect()
PHP5 報錯Fatal error: Call to undefined function mysql_connect()
解決方法一
在PHP程式碼中使用phpinfo()函式檢視PHP基本資訊
從PHP5.0開始mysql_connect()就不推薦使用了,到PHP7.0就直接被廢棄了,如果PHP為7.0及以上版本的話用mysqli_connect()代替
但是我的PHP版本是5.4的,所以可以確定不是這個問。
解決方法二
安裝的php缺少mysql模組導致,這種情況就就直接yum安裝。
yum install php-mysql php-mysqlnd
解決方法三,
如果前兩種方法都不能解決,試著在php.ini配置檔案中指定mysql模組的擴充套件
extension="/usr/lib64/php/modules/mysql.so"
但是我這裡比較蛋疼的是指定了mysql.so 之後又包了另外一個錯。蛋疼.....
NOTICE: PHP message: PHP Warning: PHP Startup: mysql: Unable to initialize module
原因是phpize和php模組的版本不一致導致的,我這裡的原因是因為伺服器上存在兩個不同版本的phpize,(因為我伺服器上安裝了兩個php)
由於php連線mysql需要用到mysql.so 這時需要手動編譯生成mysql.so擴充套件。
結論:使用phpize工具能夠生成mysql.so,但是必須加上"--with-mysql=mysql客戶端的路徑"。也就是mysql.so模組必須用到mysql客戶端才行。
可以這樣理解,mysql.so內部會呼叫mysql客戶端,以便實現連線mysql資料庫伺服器。
我們常常用到的mysql_connect()可能就是呼叫了mysql客戶端才能完成連線資料庫的操作。
生成mysql.so的過程
需要用到php的原始碼包才行。通過原始碼包中提供的phpize檔案(一個專門掛接php擴充套件的工具)
第一步:進入php原始碼中的"ext/mysql"目錄下
cd /root/php-5.4.45/ext/mysql
第二步:在當前目錄下執行phpize
/usr/local/php5/bin/phpize --with-mysql=/usr/local/mysql/
phpize的規則:去哪個目錄下執行phpize檔案,那麼就會在該目錄下生成一個configure檔案。(生成過程中會用到config.m4這個檔案,這就是為什麼要進入到這個目錄去執行的原因。 )
./configure --with-php-config=/usr/local/php5/bin/php-config --with-mysql=/usr/local/mysql/
make
make install
這裡最關鍵的是通過--with-mysql引數告訴mysql客戶端的位置。這樣才能生成mysql.so。
編譯生成.so檔案。最終要的東西
make install 之後會輸出以下資訊。
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/
在php.ini配置檔案中指定mysql模組的擴充套件
extension="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/mysql.so"
重新載入php
一切都結束了-----------------------------------------------------