2014-09-29 141 views
1

我已經閱讀了幾個關於通過Heroku使用ClearDB的問題,但他們都沒有提供足夠的指導來解決我的問題。Heroku PHP:通過Herrera PDO連接到ClearDB

所以,我的問題......

目前我已經有了部署PHP應用程序,除了我將在下面放置代碼基本上是空的。基本上,我試圖使用Herrera\PDOServiceProvider()連接到我已閱讀的ClearDB。此外,它基本上與使用ClearDB副Postgre的Heroku PHP教程相同。

我收到一個錯誤,因爲我得到一個空白頁。教程顯示我應該看到一個單詞「hello」,現在已經消失了。

<?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(); 

我不知道什麼是錯的,但我知道它是與數據庫連接,因爲當我註釋掉單詞「你好」顯示備份在我的遠程站點。

任何幫助表示讚賞。謝謝。

回答

0

問題

你已經在你的連接字符串中使用單引號:

,如果你寫了以下內容:

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

PHP會解析:

的MySQL : '本地主機' 主機=; DBNAME =「測試」;的

代替

MySQL的:主機=本地主機; DBNAME =試驗;

解決方案:

$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

我會盡快嘗試這一點,謝謝你爲我投入這個時間。對此,我真的非常感激! – 2014-09-29 22:59:45

+0

這可行,但我決定使用一個模板引擎/服務以及一個PDO提供程序,它直接使用$ app而不是將應用程序分解爲變量。再次感謝。將來我可能不得不使用它。 – 2014-09-30 01:12:31

+0

歡迎克里斯,如果你再次需要我的幫助,讓我知道!謝謝! – meda 2014-09-30 01:17:49