2014-09-02 103 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