Heroku Postgresql DB - Невозможно обновить базу данных после развертывания - PullRequest
0 голосов
/ 30 апреля 2018

Я использую Heroku для развертывания моего проекта базы данных postgresql. Сайт, который я создал с использованием PHP, HTML5 и CSS, прекрасно работает на localhost с phpmyadmin и эквивалентной базой данных MySQL. Но когда я перенес его в Heroku, работают только запросы SELECT (вставки, обновления и удаления бесполезны).

Единственные изменения с моего локального хоста на сайт heroku лежат в моем .env и файле для создания объекта данных php, который я вставил ниже. Может кто-нибудь сказать мне, где искать дальше, чтобы решить эту проблему? Журналы ошибок Heroku не показывают ошибок. Я использую pgAdmin4 для postgres db.

.env file

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 голосов
/ 01 мая 2018

Решение проблемы:

phpmyadmin поддерживает только MySQL, в то время как я использовал бесплатное дополнение Postgres для Heroku. Миграция с 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...