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

一切都结束了-----------------------------------------------------


猜你喜欢

转载自blog.51cto.com/xmomo/2334171
今日推荐