You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何部署到Heroku的PHP应用无法加载ClearDB数据库?

解决Heroku部署PHP网站出现mysql_connect()未定义的致命错误

你的问题根源其实很清晰——mysql_connect()这个函数在PHP 7及以上版本中已经被彻底移除了,而你的Cloud9开发环境应该还在用PHP 5.x版本(这个版本还保留着旧的mysql扩展),所以本地运行完全正常,但部署到Heroku后,Heroku默认的PHP环境是较新版本,自然找不到这个函数,才会出现页面空白、日志报致命错误的情况。

下面是具体的解决步骤:

1. 替换旧的mysql扩展为mysqli或PDO

这是最核心的解决办法,PHP官方早就推荐用mysqli(改进版MySQL扩展)或者PDO(数据库抽象层)替代旧的mysql扩展,两者都能在新版本PHP中正常工作。

示例:把mysql_connect()换成mysqli_connect()

假设你CoffeeModel.php第30行的原代码是这样的:

$conn = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name, $conn);

可以改成mysqli的过程式写法:

// 连接时直接指定数据库名,省去单独选库的步骤
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

// 别忘了检查连接是否成功
if (mysqli_connect_errno()) {
    die("数据库连接失败: " . mysqli_connect_error());
}

如果更习惯面向对象写法,也可以这样写:

$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);

if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

注意:后续的数据库操作也要同步替换成mysqli的方法,比如mysql_query()要换成mysqli_query(),mysql_fetch_assoc()换成mysqli_fetch_assoc()等。

可选:改用PDO连接数据库

PDO支持多种数据库,代码通用性更强,示例如下:

try {
    $conn = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8", $db_user, $db_pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}

2. 确认Heroku的PHP版本(可选)

如果你的代码还有其他依赖旧PHP版本的部分,可以在项目根目录创建composer.json文件,指定兼容的PHP版本,比如:

{
    "require": {
        "php": ">=7.4"
    }
}

不过更建议直接升级代码到适配新版本PHP的写法,毕竟旧的mysql扩展已经被淘汰多年了。

3. 测试与重新部署

修改完代码后,先在本地测试(如果Cloud9能切换到PHP7+版本测试最好),确认功能正常后再部署到Heroku,之后查看Heroku日志,确认错误是否已经消失。

内容的提问来源于stack exchange,提问作者Bwoods

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:13:06