致命错误:调用未定义的函数pg_connect()

hrs*_*shd 32 php apache postgresql

我正在尝试连接到安装了PostgreSQL的数据库(远程服务器).我的PHP代码尝试使用pg_connect()连接到数据库,但我得到错误说: - "致命错误:在第82行的/var/www/website/functions.php中调用未定义的函数pg_connect()".

第82行简单地说是:

$db = pg_connect($conn_string);
where $conn_string = "host=".$hostname." port=5432 dbname=".$dbname." user=".$db_user." password=".$db_password.""
Run Code Online (Sandbox Code Playgroud)

(前面定义的所有变量)

我查了很多论坛和唯一的解决办法是建议定位在php.ini文件,其中包含一个行: - 延长= pgsql.so(对于UNIX)和延长= php_pgsql.dll(适用于Windows).

应该对此语句进行注释,解决方案是取消注释.我已经尝试过,但仍然没有改变这种情况.远程服务器的版本晚于PostgreSQL v9.0.4.然后我将PostgreSQL v8.4.8安装到我的笔记本电脑上并使用MAMP在本地运行网站.起初,Apache崩溃了一些奇怪的原因,我解决了这个问题,但我又遇到了与之前相同的错误,即致命错误:调用未定义的函数pg_connect()....

我也运行了phpinfo()它,它表明php版本确实支持PostgreSQL模块.我花了一整天时间搜索解决方案,但一直没有成功.这是我开发网站的第一个项目,我的斗智斗勇.任何有用的帮助将受到高度赞赏.

phpinfo()在终端给了我很多东西,但与PostgreSQL相关的列表如下: -

pdo_pgsql

PDO Driver for PostgreSQL => enabled
PostgreSQL(libpq) Version => 9.0.4
Module version => 1.0.2
Revision =>  $Id: pdo_pgsql.c 306939 2011-01-01 02:19:59Z felipe $ 

pgsql

PostgreSQL Support => enabled
PostgreSQL(libpq) Version => 9.0.4
Multibyte character support => enabled
SSL support => enabled
Active Persistent Links => 0
Active Links => 0

Directive => Local Value => Master Value
pgsql.allow_persistent => On => On
pgsql.auto_reset_persistent => Off => Off
pgsql.ignore_notice => Off => Off
pgsql.log_notice => Off => Off
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited
Run Code Online (Sandbox Code Playgroud)

我在每次编辑之后都重新启动了MAMP,因为我在目前为止阅读的每篇文章中都提到了它.我相信重置Apache和PHP.

'pqsql.so'(Windows中的'php_pqsql.dll'的UNIX等价物)存在于'extension'目录中.我还将'pqsql.so'文件复制粘贴到Apache/bin目录,但它没有给我任何改动.

我不是主要在命令行中运行php.我只是好奇,想看看是什么phpinfo()函数会给我有关,我刚才在回答上述pgsql的.

我仍然在研究你提到的工具,并会在得到任何结果后立即回复.

谢谢,H

Sco*_*owe 45

您需要安装php-pgsql软件包或其为您的平台调用的任何软件包.我不认为你这样说的.

在Ubuntu和Debian上:

sudo apt-get install php5-pgsql
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.这对我在ubuntu上工作,但我也不得不用`sudo service apache2 restart`重启apache.我希望能帮到别人. (9认同)
  • 在 ubuntu 18.04 上是:sudo apt install php-pgsql (3认同)
  • 目前在Mac上使用brew:`brew install php56-pdo-pgsql` (2认同)
  • 事实上,在 Ubuntu 衍生品上,“sudo apt install php-pgsql”会为您安装的任何 PHP 版本安装它。 (2认同)

Ang*_*dar 15

sudo apt-get install php5-pgsql
Run Code Online (Sandbox Code Playgroud)

要么

sudo service apache2 restart //restart apache
Run Code Online (Sandbox Code Playgroud)


小智 9

致命错误:调用未定义的函数pg_connect()...

我在Archlinux中安装Lampp或xampp时出现此错误,

解决方案是编辑php.ini,它位于/opt/lampp/etc/php.ini中

然后找到这一行并取消注释

扩展= "pgsql.so"

然后用xampp重启服务器apache并测试...

祝好运


JRL*_*JRL 6

编辑.我刚注意到你提到了MAMP.我的建议是针对Windows,但如果你知道使用哪些相应的工具可能会有用.

要尝试的事情:

  • 你编辑php.ini后重启了PHP和Apache吗?

  • php_pgsql.dll是否在php\ext目录中找到?

  • 你在运行php作为模块吗?如果是这样,请尝试复制Apache\bin目录中的php_pgsql.dll文件.

  • 您是否使用指定不同php.ini文件的标志从命令行运行PHP?

  • 您可以尝试使用Sysinternals的Filemon等工具来查看运行PHP时尝试访问的文件.

  • 您可以尝试使用Dependency Walker之类的工具来查看postgreSQL DLL的依赖项,以防您缺少依赖项.快速搜索为Unix 带来了ldd.


Che*_*tan 5

  1. 将'PHPIniDir"C:/ php"'添加到httpd.conf文件中.(假设你将PHP保存在C:中,或者给出保存PHP的位置.)
  2. 取消注释php.ini文件中的'extension = php_pgsql.dll'
  3. 在php.ini目录中取消注释'; extension_dir ="ext"'

  • 但我尝试通过为现有的先前解决方案添加额外步骤来提供解决方案 (2认同)