Добрый вечер!
Есть готовый рабочий код написанный в стиле PDO, его нужно переписать в процедурном стиле.
Суть кода в том, что необходимо вывести все категории и подкатегории из БД и отобразить их с помощью treeview.j
Как выглядит БД:
Вот в PDO:
$connect = new PDO("mysql:host=localhost; dbname=admin", "root", "");
$parent_category_id = 0;
$query = "SELECT * FROM category";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
foreach ($result as $row) {
$data = get_node_data($parent_category_id, $connect);
}
echo json_encode(array_values($data), JSON_UNESCAPED_UNICODE);
function get_node_data($parent_category_id, $connect)
{
$query = "SELECT * FROM category WHERE parent_id = '" . $parent_category_id . "'";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$output = array();
foreach ($result as $row) {
$sub_array = array();
$sub_array['text'] = $row['title'];
$sub_array['type'] = $row['category_type'];
$sub_array['nodes'] = array_values(get_node_data($row['id'], $connect));
$output[] = $sub_array;
}
return $output;
}
Вот переписанный код в процедурном стиле:
mysqli_fetch_all тоже пробовал вместо mysqli_fetch_assoc
define("DBHOST", "localhost"); //
define("DBUSER", "root"); //
define("DBPASS", ""); //
define("DB", "admin"); //
$connection = mysqli_connect(DBHOST, DBUSER, DBPASS, DB) or die("Нет соединения с БД");
mysqli_set_charset($connection, "utf8") or die("Не установлена кодировка соединения");
$parent_category_id = 0;
$query = "SELECT * FROM category";
$res = mysqli_query($connection, $query);
$result = mysqli_fetch_assoc($res);
foreach ($result as $row) {
$data = get_node_data($parent_category_id, $connection);
}
echo json_encode(array_values($data), JSON_UNESCAPED_UNICODE);
function get_node_data($parent_category_id, $connection)
{
$query = "SELECT * FROM category WHERE parent_id = '$parent_category_id'";
$res = mysqli_query($connection, $query);
$result = mysqli_fetch_assoc($res);
$output = array();
foreach ($result as $row) {
$sub_array = array();
$sub_array['text'] = $row['title'];
$sub_array['type'] = $row['category_type'];
$sub_array['nodes'] = array_values(get_node_data($row['id'], $connection));
$output[] = $sub_array;
}
return $output;
}
Но этот вариант не срабатывает, ругаясь на
$sub_array['text'] = $row['title'];
, пишет "Uncaught TypeError: Cannot access offset of type string on string"
Вот js файл:
fill_treeview();
function fill_treeview() {
$.ajax({
type: "GET",
url: site_url + tree_url,
dataType: "json",
success: function (data) {
console.log(data);
$('#tree').bstreeview({
data: data,
expandIcon: 'feather icon-chevron-down',
collapseIcon: 'feather icon-chevron-right',
indent: 2,
parentsMarginLeft: '1.25rem',
openNodeLinkOnNewTab: false,
});
},
error: function (data) {
console.log(data);
$('#treeview').append('Ошибка!');
}
})
}
Ajax запрос отрабатывает как надо, тут проблем нет.
Подскажите пожалуйста где допущена лажа в процедурном варианте?