Heroku PHP: подключение к ClearDB через Herrera PDO

Я прочитал несколько вопросов об использовании ClearDB через Heroku, но ни один из них не дал достаточно рекомендаций, чтобы решить мою проблему.

Итак, моя проблема …

В настоящее время у меня развернуто приложение PHP, которое в основном пустое, за исключением кода, который я разместлю ниже. В основном я пытаюсь использовать Herrera\PDOServiceProvider() подключиться к ClearDB, который я прочитал, возможно. Кроме того, это в основном то же самое, что и учебник по Heroku PHP, использующий ClearDB и Postgre.

Я получаю ошибку где-то, потому что я получаю пустую страницу. Учебное пособие показывает, что я должен увидеть одно слово «привет», которое теперь пропало.

<?php

require('../vendor/autoload.php');

use Herrera\Pdo\PdoServiceProvider;
use Silex\Application;

$app = new Application();
$app['debug'] = true;

// Register the monolog logging service
$app->register(new Silex\Provider\MonologServiceProvider(), array(
'monolog.logfile' => 'php://stderr',
));

// Our web handlers

$app->get('/', function() use($app) {
$app['monolog']->addDebug('logging output.');
return 'Hello';
});

$dbopts = parse_url(getenv('DATABASE_URL'));
//print_r(array_values($dbopts));
$app->register(new PdoServiceProvider(),
array(
'pdo.dsn' => 'mysql:dbname='.ltrim($dbopts["path"],'/').';host='.$dbopts["host"],
'pdo.port' => $dbopts["port"],
'pdo.username' => $dbopts["user"],
'pdo.password' => $dbopts["pass"]
)
);

$host = $app['pdo.dsn.host'];
$dbname = $app['pdo.dsn.mysql:dbname'];
$user = $app['pdo.username'];
$pass = $app['pdo.password'];*/

$pdo = new PDO("mysql:host='.$host.'; dbname='.$dbname.';", $user, $pass);
$statement = $pdo->query("SELECT title FROM news");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['title']);

app->run();

Я не уверен точно, что не так, но я знаю, что это как-то связано с подключением к БД, потому что, когда я его закомментирую, слово «Hello» снова появляется на моем удаленном сайте.

Любая помощь приветствуется. Спасибо.

2

Решение

проблема

Вы использовали одинарные кавычки в строках соединения:

если вы напишите следующее:

"mysql:host='.$host.'; dbname='.$dbname.';"

PHP будет разбираться как:

MySQL: хост =; ‘локальный.’. имя_бд = ‘тест.’;

вместо

MySQL: хост = локальный; имя_бд = тест;

Решение:

$pdo = new PDO("mysql:host=$host; dbname=$dbname;", $user, $pass);

или же

$pdo = new PDO("mysql:host=".$host."; dbname=".$dbname.";", $user, $pass);

Фактически, вам даже не нужна последняя точка с запятой:

$pdo = new PDO("mysql:host=".$host."; dbname=".$dbname, $user, $pass);

  • Это хорошая идея, чтобы включить режим ошибок и ловить исключения
  • Вам нужен цикл, если у вас более одной строки

Код:

try {
$pdo = new PDO("mysql:host=".$host."; dbname=".$dbname, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
foreach($pdo->query('SELECT title FROM news') as $row) {
echo htmlentities($row['title']);
}
$pdo = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]