Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和PDO-从MySQL迁移-不显示结果或错误_Php_Mysql_Pdo - Fatal编程技术网

PHP和PDO-从MySQL迁移-不显示结果或错误

PHP和PDO-从MySQL迁移-不显示结果或错误,php,mysql,pdo,Php,Mysql,Pdo,我正在将我的部分代码从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:

我正在将我的部分代码从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();

?>

您存储在
$行中
,但之后使用的是
$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 {
    // ...
试试看

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


在函数generatePage()中不能返回任何内容{@punithasubramaniv可以假定输出由
$t->generateOutput()处理
@GeraldSchneider,你说得对。谢谢你。我知道我在过渡过程中犯了一个新手错误!至于课程,我会调查一下!你能给我指一下你最后一点的文档方向吗(使用global$db)非常感谢!非常有效!您的解决方案也正确!我存储在一个未调用的变量中。感谢您的输入!
$result->fetch(PDO::FETCH_$rows->fetch(PDO::FETCH_ASSOC)){ )){ 
$rows->fetch(PDO::FETCH_ASSOC)){