在mac上怎么用php操作pgsql(PostgreSQL)?

在mac运行php,如果要操作pgsql(PostgreSQL),常见的有两种驱动类型:一种是php_pgsql,一种是php_pdo_pgsql(PDO:PHP Data Object),后者在php5之后才支持,PDO在功能、性能、安全性上都比前者要好一些。
如果代码用的是pdo,那么使用非常简单,用brew安装相应的pdo-pgsql即可。
如果程序里用的是前者,就是pg_connect、pg_query、pg_close之类的,安装pdo-pgsql就不好用了,运行代码会报:Call to undefined function pg_connect(),很烦人,下面描述解决过程及方法。

在mac上怎么用php操作pgsql(PostgreSQL)?

echo extension_loaded(pgsql)? "yes": "no"

上面这句可以检查pgsql是否成功安装并加载,注意:对于使用pg_connect这种老式用法的工程,上面这句必须打印yes才行。对于PDO的extension_loaded(pdo_pgsql)返回yes就可以了。

到这里可能敏锐的同学会问了:不用这么麻烦啊,直接安装MAMP之类的软件,装好直接启动php,pgsql这些都是好的,主要是因为MAMP方式默认又无法调用一些扩展,比如Imagick,在MAMP方式安装Imagick也是一件费时的事情,最关键MAMP也不免费。

这个问题搜遍国内外技术网站,包括stackoverflow,注意:没有一种方案好用,不是在说windows上怎么弄,就是在基于pdo的,总之都是词不达意。
到这里可能敏锐的同学又会问了:既然基于pdo的,用brew安装完就好了,那么这个也用brew安装下php_pgsql不就可以了吗?
这个问题很好,不过遗憾的是brew上没有pgsql可以安装,那该到哪里弄这个pgsql呢?找到之后又该怎么弄呢?看下面:

1.下载和你php版本匹配的源代码,比如:http://us.php.net/distributions/php-5.3.3.tar.gz
2.解压:tar -xzvf php-5.3.3.tar.gz
3.到源码里的pgsql目录:cd php-5.3.3/ext/pgsql/
4.输入:phpize
5.输入:./configure
6.输入:make
7.输入:sudo make install

经过如上步骤,在你的php目录的lib/php/extensions下会有一个:no-debug-non-zts-20131226 这样的一个目录,后面的一串数字可能不全一样,这个没关系。打开这个目录,里面会产生一个:pgsql.so的文件。

8.这个时候在你的php.ini文件里,加上extension=pgsql.so,如果已经有就不用加了。加上之后php启动的时候会自动到no-debug-non-zts-20131226加载pgsql.so文件。
9.重新启动php,然后再运行echo extension_loaded(pgsql)? "yes": "no",你会发现可以打印出yes了。

这样你就可以在程序里用pg_connect、pg_query、pg_close之类的方法了。如果你说到最后一步发现还是打印的no,那么就只能留意上面的每一步是否都是成功的,或者请教大牛。

相关阅读