我已经使用 --with-mysqli=mysqlnd 选项在 Mac OS X 10.6 上从源代码编译了 PHP 5.3.6。php -m 和 php-cgi -m 的输出都显示 mysqli 和 mysqlnd 模块。当我使用常规 php 二进制文件运行包含 mysql_connect(...) 的简单测试 PHP 文件时,它可以正常连接。当我使用带有 php-cgi 的相同测试 PHP 文件时,我得到:
PHP 致命错误:在 /Users/chris/test2.php 第 2 行调用未定义的函数 mysql_connect()
我已经确认 php.ini 中的 MySQL 套接字信息正确,并确保 php-cgi 使用 -c 参数使用该文件。使用常规 mysql 命令行界面时,MySQL 工作正常,并且显然与常规 PHP 配合使用。php-cgi 中的 phpinfo() 显示 mysqli 和 mysqlnd 库的正确版本。
我需要在这个特定环境中以 CGI 配置运行 PHP,因此我确实需要 php-cgi 才能工作。目前我并不担心 Apache2/nginx/etc - 只是让 CGI 工作。对于我缺少什么,有什么建议吗?
答案1
您已编译了 PHP 并支持mysqli扩展(mysqli_* 函数)...但错误清楚地表明你正在使用mysql_connect()
函数(不带“i”,属于mysql扩展)。这是两个不同的扩展:mysqli
代表“MySQL 改进版”,与较旧且功能较少的扩展相比,更适合使用mysql
。
您有 2 个选择:
1)更新代码以使用mysqli_*
函数
2)再次编译 PHP 并添加mysql
扩展支持(不要忘记稍后在 php.ini 中启用它)
附言无论如何,我建议您使用 PDO 来满足您的数据库需求(当然,如果可以的话)。