我正在将部分代码从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();
?>
答案 0 :(得分: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 {
// ...
答案 1 :(得分:0)
试试吗?
$rows = getSearch("region", "region_name");
但
$result->fetch(PDO::FETCH_$rows->fetch(PDO::FETCH_ASSOC)){ )){
到
$rows->fetch(PDO::FETCH_ASSOC)){