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

一切都結束了-----------------------------------------------------


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章