我正在将部分代码从mySQL迁移到PDO,但似乎看不到代码有什么问题。

我有一个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();

?>

最佳答案

您将存储在$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 {
    // ...

关于php - PHP和PDO-从MySQL迁移-不显示结果或错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25622658/

10-16 18:07