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