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
一切都結束了-----------------------------------------------------