Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
尝试使用pdo获取多级类别树并获取PHP致命错误:在中调用未定义的函数build_category_tree()_Php_Mysql_Pdo - Fatal编程技术网

尝试使用pdo获取多级类别树并获取PHP致命错误:在中调用未定义的函数build_category_tree()

尝试使用pdo获取多级类别树并获取PHP致命错误:在中调用未定义的函数build_category_tree(),php,mysql,pdo,Php,Mysql,Pdo,我对OOP非常陌生,多年来没有使用php编程,但实际上我正在尝试的是在CRUD应用程序中显示一个多级类别树。我有一个Category类和一个方法,可以根据父类id显示相应的类别。到目前为止,我的其他尝试显示整个内容,即select语句中的所有类别和子类别。这是我的分类课,你会注意到我尝试了一些东西,但没有成功 class Category{ // database connection and table name private $conn; private $table_name = "m

我对OOP非常陌生,多年来没有使用php编程,但实际上我正在尝试的是在CRUD应用程序中显示一个多级类别树。我有一个Category类和一个方法,可以根据父类id显示相应的类别。到目前为止,我的其他尝试显示整个内容,即select语句中的所有类别和子类别。这是我的分类课,你会注意到我尝试了一些东西,但没有成功

class Category{

// database connection and table name
private $conn;
private $table_name = "menu";

// object properties
public $id;
public $name;
public $parent_id;

public function __construct($db){
    $this->conn = $db;
}
//Builds the category tree recursively fetching data    
function build_category_tree(&$output, $preselected, $parent=0, $indent=""){
 $query = "SELECT id, name FROM menu WHERE parent_id = " . $parent . "
";

while($r = $query->fetch(PDO::FETCH_ASSOC)){
$selected = ($r["id"] == $preselected) ? "selected=\"selected\"" : "";
$output .= "<option value=\"" . $r["id"] . "\" " . $selected . ">" . $indent . $r["name"] . "</option>";
if($r["id"] != $parent){
  build_category_tree($output, $preselected, $r["id"], $indent . "&nbsp;&nbsp;");
}
}

}
// used by select drop-down list
function read(){
    //select all data
   $query  = "SELECT
                id, name
            FROM
                " . $this->table_name . "";  
/*$query = "SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4, t5.name as lev5\n"
. "FROM menu AS t1\n"
. "LEFT JOIN menu AS t2 ON t2.parent_id = t1.id\n"
. "LEFT JOIN menu AS t3 ON t3.parent_id = t2.id\n"
. "LEFT JOIN menu AS t4 ON t4.parent_id= t3.id\n"
. "LEFT JOIN menu AS t5 ON t5.parent_id= t4.id\n"
. "WHERE t1.parent_id = 0";*/
    $stmt = $this->conn->prepare( $query );
    $stmt->execute();

    return $stmt;
}
function readName(){
 /*$query = "SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4, t5.name as lev5\n"
. "FROM menu AS t1\n"
. "LEFT JOIN menu AS t2 ON t2.parent_id = t1.id\n"
. "LEFT JOIN menu AS t3 ON t3.parent_id = t2.id\n"
. "LEFT JOIN menu AS t4 ON t4.parent_id= t3.id\n"
. "LEFT JOIN menu AS t5 ON t5.parent_id= t4.id\n"
. "WHERE t1.parent_id = ? limit 0,1";*/
$query = "SELECT name FROM " . $this->table_name . " WHERE id = ? ";
$stmt = $this->conn->prepare( $query );
$stmt->bindParam(1, $this->id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

$this->name = $row['name'];

 }



}
下一个脚本将使用适当的类别构建select标记。由于我有5个级别的类别,我试图简化选择,使其更易于管理

     // read the product categories from the database
     include_once 'objects/category.php';

$category = new Category($db);
$stmt = $category->read();



/* //This works fine in a single level that is no subcategories
echo "<select class='form-control' name='category_id'>";
      echo "<option>Seleccioná la categoría...</option>";

    while ($row_category = $stmt->fetch(PDO::FETCH_ASSOC)){
        extract($row_category);
        echo "<option value='{$id}'>{$name}</option>";
    }*/
// put them in a select drop-down
$category->build_category_tree($locations, 0);  

// echo "</select>";
?><select><?php echo $locations ?></select>
<!-- Test other options -->
<select>
<option value="-1">Seleccioná la categoría</option> 
<?php echo $locations ?>

这不是一个函数,它是一个方法,所以当你进行递归调用时,你仍然需要将它应用到一个对象,我猜是当前的一个,所以$this->build_category_tree…你是什么意思?我在类中应用它,就好像$r[id]!=$父项{$this->build\u category\u tree$output,$preselected,$r[id],$indent.}它不起作用仍然是相同的错误。。。是否应在其他位置调用?错误消息应告诉您问题所在。您在标题中添加的部分以中的未定义函数build_category_tree的调用结束,但紧接着消息会显示文件名和行号。如果您进入该文件,在该特定行,您将看到您正在调用build_category_tree作为函数,而不是methodPHP致命错误:在第21行的/Applications/MAMP/htdocs/n/objects/category.php中调用成员函数fetch对非对象执行操作,第21行是类方法$category->build_category_tree$locations,0;