我正在使用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"], "/")
));
答案 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!