linux下为php安装pdo_mysql扩展

当初安装php的时候并没有安装太多的扩展,一般都是在需要使用的时候再安装,由于php5.5开始逐步废弃mysql扩展,当使用mysql扩展相关函数的时候会出现提示信息,因此转战mysqli或者pdo势在必行,小编是觉得pdo应该比mysqli更持久,因此决定安装pdo_mysql扩展。

相关环境

操作系统:centos6.5 ,php版本:5.5.12,mysql版本:5.6.7,nginx版本:1.7.0

其实安装一个php扩展并不是很麻烦,打开php源码文件夹(非php安装目录),如果删除了那就再下个吧,像是这种源码文件夹尽量保留,因为不知道什么时候可能会用到,再说删除这个也节省不了多少空间不是。打开ext目录,这里面就是php提供的所有可以支持的扩展了,里面的每一个文件夹都代表了一个扩展模块,当然它们不能直接被使用,需要借助php提供给我们的神器phpize了,下面我们就来看下如何安装pdo_mysql扩展吧:

cd php源码目录/ext/pdo_mysql
php安装目录/bin/phpize
./configure --with-php-config=php安装目录/bin/php-config --with-pdo-mysql=mysql安装目录
make
make install

其实整个安装过程很简单,但是有几个需要注意的地方,一是php源码目录和安装目录不要搞混,二是如果你使用的是源码安装的mysql,如果不带--with-pdo-mysql在make的时候会报错,因为系统会找不到mysql(yum安装的时候未测试,不知道是否会报错),我们只需要在配置的时候指定一下mysql安装的目录即可,如果你进行make test的时候可能会报错,不用管它,直接make install就行,不耽误使用。

如果没什么意外,我们的pdo_mysql算是安装成功了,如果你没有更改默认扩展的生成路径的话,可以在php安装目录/lib/php/extensions/no-debug-non-zts-XXXXXXX'查看已经存在的扩展,其中X是个日期,每个用户可能不同;当然你也可以使用在php安装目录下bin文件夹中找到php文件,使用./php -m来查看。


扩展生成之后我们还需要在php中引用该扩展,打开php.ini(小编的该文件位于php安装目录/lib文件夹下),找到扩展相关参数,添加extension=pdo_mysql.so,然后重新启动php-fpm(小编使用的是nginx,如果使用的apache,可以重新启动apache)使之生效。

至此,php添加pdo_mysql扩展就告一段落了,其实这个过程还是很简单的,但是测试的时候却出现了一个意想不到的问题

$dsn  = 'mysql:host=localhost;dbname=test';
$user = 'user';
$pass = 'pass';
$db = new PDO($dsn,$user,$pass);
$query = $db->query('select * from test');
$rs = $query->fetch();
var_dump($rs); 

本来很简单的一个测试,但是居然返回了 Fatal error: Call to a member function fetch() on a non-object,叫小编郁闷不已,明明定义的有fetch方法,为什么会抛出一个致命的错误呢?于是乎小编又var_dump($query),居然返回了false,到底是什么原因呢?有问题先百度,于是乎百度了一下“pdo query  false”,不知道是否是搜索的关键字有问题,居然没有一条有用的信息,于是乎只能盲目的各种测试,删除了pdo_mysql重新编译,删除了pdo重新编译等等,但是令人失望的是没一个能解决该问题,就当小编准备不再纠结这个问题的时候,居然意外的解决了这个问题,原先是先设定了变量,然后在new PDO的时候把变量带入,那么直接带入变量会不会变好呢?于是乎小编就又做了一次尝试,不借助于变量,直接书写
$db = new PDO('mysql:host=localhost;dbname=test','user','pass');
$query = $db->query('select * from test');
$rs = $query->fetch();
var_dump($rs); 

 意想不到的事情发生了,这次居然var_dump($rs)出了结果,真是太意外了,如果乎又做了各种测试,发现如果数据源(也就是mysql:host部分)使用变量带入,那么$db不能正确的返回资源,导致接下来的所有操作无法进行,至于user和pass倒是无所谓,可以使用变量,也可以使用非变量,至于原因小编到现在也没搞清楚,难道是php5.5.12版本的pdo_mysql扩展的 一个bug?就是这样一个bug导致小编挂心了一两天,各种测试,各种纠结,看来做个成功的猿类还真是不容易,仅献给跟小编一样遇到这个bug的朋友,你们可以不用在纠结了。 
  


你可能感兴趣的:(Linux,php)