2014-09-02 35 views
0

我將mySQL的部分代碼從mySQL遷移到PDO,我似乎無法看到我的代碼出了什麼問題。PHP和PDO - 從MySQL遷移 - 不顯示結果或錯誤

我有一個try/catch語句和錯誤報告,但我什麼都沒有得到。

這裏有人可以看到什麼是錯的?

是有關這個問題的文件是:

db_pdo.php

<?php 

// Define connection 

$db_host = "localhost"; 
$db_name = "winestore"; 
$db_user = "user"; 
$db_pass = "pass"; 

$db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

?> 

的search.php

<?php 

require_once ("MiniTemplator.class.php"); 

function getSearch($tableName, $attributeName) { 
    try { 
     require ("db_pdo.php"); 

     $query = "SELECT DISTINCT {$attributeName} FROM {$tableName} ORDER BY {$attributeName}"; 

     return $db->query($query); 

    } catch (PDOException $e) { 
     echo $e->getMessage(); 
     exit; 
    } 
} 

function generatePage(){ 
    $t = new MiniTemplator; 

    $t->readTemplateFromFile ("search_template.htm"); 

    $rows = getSearch("region", "region_name"); 
    while ($row = $result->fetch(PDO::FETCH_ASSOC)){ 
     $t->setVariable('regionName', $row['region_name']); 

     $t->addBlock("regionName"); 
    } 

    $rows = getSearch("grape_variety", "variety"); 
    while ($row = $result->fetch(PDO::FETCH_ASSOC)){ 
     $t->setVariable('variety', $row['variety']); 

     $t->addBlock("variety"); 
    } 

    $rows = getSearch("wine", "year"); 
    while ($row = $result->fetch(PDO::FETCH_ASSOC)){ 
     $t->setVariable('minYear', $row['year']); 

     $t->addBlock("minYear"); 
    } 

    $rows = getSearch("wine", "year"); 
    while ($row = $result->fetch(PDO::FETCH_ASSOC)){ 
     $t->setVariable('maxYear', $row['year']); 

     $t->addBlock("maxYear"); 
    } 
    $t->generateOutput(); 
} 

generatePage(); 

?> 
+0

你不力的功能generatePage(){ – 2014-09-02 11:53:41

+0

返回任何@punithasubramaniv可以假定輸出由'$ T-> generateOutput處理()' – 2014-09-02 12:00:14

+0

@GeraldSchneider,你是對的。 – Cheung 2014-09-02 12:06:27

回答

0

你存儲在$rows,但你之後使用$result,這將是空的。

// $rows = getSearch("region", "region_name"); 
// should be this: 
$result = getSearch("region", "region_name"); 
while ($row = $result->fetch(PDO::FETCH_ASSOC)){ 

備註:您正在爲每個搜索創建一個新的數據庫連接。您應該存儲您的$db對象並重用它,而不是創建它的新實例。我建議你包在您儲存這些類中的所有這些功能,但既然你說要遷移現有的代碼,你可以使用global $db現有對象拉進你的函數的變量範圍:

// include this file once at the beginning of your script 
require_once("db_pdo.php"); 

function getSearch($tableName, $attributeName) { 
    global $db; // pull $db inside the variable scope 
    try { 
    // ... 
+0

謝謝你。我知道我在轉型過程中的某個地方犯了一個菜鳥錯誤! 至於課堂,我會研究一下!你能指出我的方向,你的最後一點(使用全球$ db)的一些文件? – Cheung 2014-09-02 12:08:28

+0

我加了一個例子 – 2014-09-02 12:10:05

+0

非常感謝!作品一種享受! – Cheung 2014-09-02 12:11:26

0

試試吧?

$rows = getSearch("region", "region_name"); 

$result->fetch(PDO::FETCH_$rows->fetch(PDO::FETCH_ASSOC)){)){ 

$rows->fetch(PDO::FETCH_ASSOC)){ 
+0

您的解決方案也是正確的!我正在存儲一個未被調用的變量。 感謝您的輸入! – Cheung 2014-09-02 12:09:52