Heroku Postgresql DB - 部署后无法更新数据库

时间:2018-04-30 17:40:42

标签: php mysql postgresql heroku

我正在使用Heroku来部署我的postgresql数据库项目。我使用PHP,HTML5和CSS创建的站点在localhost上使用phpmyadmin和等效的MySQL数据库工作正常。但是,当我将它转移到Heroku时,只有SELECT查询工作(插入,更新和删除都不好)。

从我的localhost到heroku站点的唯一更改位于我的.env和文件中,以创建我粘贴在下面的php数据对象。任何人都可以告诉我下一步要解决这个问题吗? Heroku错误日志不会显示任何错误。我使用pgAdmin4作为postgres db。

.env文件

DATABASE_URL="pgsql://postgres:mypassword@localhost:5432/dbname"

其他档案

require __DIR__ . '/vendor/autoload.php';

$dbopts = parse_url(getenv('DATABASE_URL'));

$dbopts["path"] = ltrim($dbopts["path"], "/");

$db = new PDO("pgsql:" . sprintf(
"host=%s;port=%s;user=%s;password=%s;dbname=%s",
$dbopts["host"],
$dbopts["port"],
$dbopts["user"],
$dbopts["pass"],
ltrim($dbopts["path"], "/")
));

1 个答案:

答案 0 :(得分:1)

问题解决方案:

phpmyadmin只支持MySQL,而我使用Heroku的免费Postgres插件。从本地phpmyadmin迁移到Heroku,发现两种语言之间的语法略有不同。

我的特殊错误与MySQL属性中的大写字母有关,后者在Postgres中恢复为全部小写。我的一个函数中的示例:

MySQL版本:

$sql = "SELECT DISTINCT ID FROM Doctors";
$query = $db->prepare($sql); 
$query->execute(); 
$results = $query->fetchAll(\PDO::FETCH_ASSOC); 
$did = array_column($results, 'ID');
$docid = implode(",", $did); 

Postgres版本:

$sql = "SELECT DISTINCT ID FROM Doctors";
$query = $db->prepare($sql); 
$query->execute(); 
$results = $query->fetchAll(\PDO::FETCH_ASSOC); 
$did = array_column($results, 'id');   // difference
$docid = implode(",", $did); 

如果不是针对uni项目,我会使用phpPgAdmin而不是phpmyadmin来避免迁移差异。谢谢@Chris和@halfer!