1. 程式人生 > >Call to undefined function mysql_connect()

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

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