我有一个简单的mysqli包装类,用于我的数据库操作。我在代码顶部定义(实例化?)该类可能是全局可访问的,但是当我尝试在递归函数中使用这个对db类的引用时,xdebug告诉我它超出了范围 - 所以作为修复我不得不两次定义数据库,但这似乎是不好的做法。任何人都可以告诉我们哪里出错或者我哪里出错了?
代码以递归方式从数据库FYI打印嵌套注释。
代码如下......
<?php
require 'lib/mysqli.class.php'; // the pretty standard mysqli class
$config = array();$config['host'] = 'localhost';$config['user'] = 'root';$config['pass'] = '';$config['table'] = 'publicate';
$db = new DB($config); // new instance of database
//$db->setFetchMode(2); // fetch data by association (MYSQLI_ASSOC)
// Run a Query:
$db->query('SELECT * FROM comments WHERE parentid = 0');
// Get the data:
$root_sql = $db->get();
recursive_categories($root_sql);
function recursive_categories($results)
{
if(count($results))
{
echo "<ul>";
foreach($results as $res)
{
echo "<li>" . "id=" . $res['id'] . ", pid=" . $res['parentid'] . ", content: " . $res['content'];
//Rest of what ever you want to do with each row
//Check this category for children ************************
//2nd definition of DB ************************
$config = array();$config['host'] = 'localhost';$config['user'] = 'root';$config['pass'] = '';$config['table'] = 'publicate';
$db2 = new DB($config); // new instance of database
$db2->query("SELECT * FROM comments WHERE parentid = " . $res['id']);
$rows = $db2->get();
recursive_categories($rows);
//has to be after the inner loops
echo "</li>";
}
echo "</ul>";
}
}
?>
感谢。
答案 0 :(得分:1)
您需要将$ db连接传递给函数,如下所示:
function recursive_categories($results, $db)
然后它将在函数变量范围内可用。
我想到的另一个问题是:如果此文件位于可公开访问的网络目录中,您绝对不希望拥有实际的数据库凭据,只是在公开场所冷却。