2014-09-29 3 views
1

Я прочитал несколько вопросов об использовании ClearDB через Heroku, но ни один из них не дал достаточного руководства для решения моей проблемы.Heroku PHP: Подключение к ClearDB через Herrera PDO

Итак, мой вопрос ...

В настоящее время у меня есть PHP приложение, развернутое, которое в основном пустой, за исключением кода, который я место ниже. В принципе, я пытаюсь использовать Herrera\PDOServiceProvider() для подключения к ClearDB, который я читал, возможно. Кроме того, это в основном то же самое, что и учебник PHP по Heroku, только используя ClearDB Vice 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» показывает назад на моем удаленном узле.

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

ответ

0

Проблема

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

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

"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(); 
} 
+0

Я буду попробуйте это, как только я могу, спасибо вам за то время, которое вы вложили в это для меня. Я очень ценю это! –

+0

Это работает, но я решил использовать механизм/службу шаблонов рядом с провайдером PDO, который использует $ app напрямую и разбивает приложение на переменные. Еще раз спасибо. Возможно, мне придется использовать это в будущем. –

+0

Приветствую вас, если вам нужна моя помощь, дайте мне знать! Благодаря! – meda

Смежные вопросы