【发布时间】:2018-10-10 20:20:40
【问题描述】:
我正在使用 Heroku 来部署我的 postgresql 数据库项目。我使用 PHP、HTML5 和 CSS 创建的站点在本地主机上使用 phpmyadmin 和等效的 MySQL 数据库运行良好。但是,当我将它转移到 Heroku 时,只有 SELECT 查询起作用(插入、更新和删除都不好)。
从我的 localhost 到 heroku 站点的唯一变化在于我的 .env 和文件,以创建我粘贴在下面的 php 数据对象。谁能告诉我下一步该去哪里解决这个问题? Heroku 错误日志不显示任何错误。我正在为 postgres 数据库使用 pgAdmin4。
.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"], "/")
));
【问题讨论】:
-
我想知道是否值得使用另一个变量来存储
sprintf()的结果,以便您可以轻松地回显它。你能告诉我们里面有什么,减去任何安全敏感信息吗? (不要假设其中有什么 - 检查它在 PHP 中实际解析的内容)。 -
嗯,你是从 config 中读取 URL,解析它,然后将它们重新组合在一起吗?您可以直接将
getenv('DATABASE_URL')输入连接字符串吗? -
看起来你也做了两次
ltrim($dbopts["path"], "/")- 这是故意的吗? -
非常感谢您的帮助! @Chris 是正确的,问题在于数据库语言迁移。结果 Postgres 通过将属性名称全部设为小写来规范化属性名称,因此我的 php 函数(即 array_column)无法识别带有大写字母的表属性。菜鸟错误。
-
如果你修好了那就太好了!如果您认为它可能对其他人有所帮助,请在下面的答案中发布解决方案的摘要(或询问@Chris,以便他们得到适当的记分)。
标签: php mysql postgresql heroku