![](/img/trans.png)
[英]PHP7.4 and firebird/interbase: ibase_connect(), ibase_query() Call to undefined function
[英]Recursive function php with ibase querys
我有一個函數,通過某個文件的id構建一個路徑,該函數完美地工作,直到它拋出一個ibase_query
錯誤。 這是功能:
function Build_Path($id,$database){
$path_query = "SELECT PATH_NAME,FATHER_ID,VOLUME_ID FROM PATHS WHERE PATH_ID = ".$id;
$query = ibase_query($database, $path_query);
while ($names = ibase_fetch_object($query)) {
$path_volume_id = $names->VOLUME_ID;
$name = $names->PATH_NAME;
$father_id = $names->FATHER_ID;
if ($name == "") {
$volumes = ibase_query($database, "SELECT VOLUME_NAME FROM VOLUMES WHERE VOLUME_ID = " . $path_volume_id);
while ($get_volume_name = ibase_fetch_object($volumes)) {
return $get_volume_name->VOLUME_NAME;
}
ibase_free_result($volumes);
} else {
return Build_Path($father_id, $database) . "/" . $name;
}
}
ibase_free_result($query);
ibase_close($database);
}
錯誤僅在路徑號12999之后拋出,它說:
ibase_query(): too many open handles to database
錯誤被拋出一次然后查詢沒有收到任何結果,雖然我的數據庫中有1500000+路徑。
試試這個遞歸函數
WITH RECURSIVE hierarchy (PATH_ID, PARENT_ID, PATH_NAME) as (
SELECT PATH_ID, PARENT_ID, PATH_NAME
FROM PATHS
WHERE PARENT_ID = -1
UNION ALL
SELECT PATH_ID, PARENT_ID, PATH_NAME
FROM PATHS f
JOIN hierarchy p ON p.PATH_ID = f.PARENT_ID
)
SELECT *
FROM hierarchy
編輯 發現firebird實際上是一個數據庫引擎。 每天學點東西
你為什么不使用加入?
SELECT VOLUMES.VOLUME_NAME FROM PATHS WHERE PATH_ID = :ID
left join PATHS as PATH_1 on PATHS.FATHER_ID = PATH_1.PATH_ID
left join PATHS as PATH_2 on PATH_1.FATHER_ID = PATH_2.PATH_ID
left join PATHS as PATH_3 on PATH_2.FATHER_ID = PATH_3.PATH_ID
left join PATHS as PATH_4 on PATH_3.FATHER_ID = PATH_4.PATH_ID
left join PATHS as PATH_5 on PATH_4.FATHER_ID = PATH_5.PATH_ID
left join PATHS as PATH_6 on PATH_5.FATHER_ID = PATH_6.PATH_ID
left join PATHS as PATH_7 on PATH_6.FATHER_ID = PATH_7.PATH_ID
left join PATHS as PATH_8 on PATH_7.FATHER_ID = PATH_8.PATH_ID
left join PATHS as PATH_9 on PATH_8.FATHER_ID = PATH_9.PATH_ID
left join PATHS as PATH_10 on PATH_9.FATHER_ID = PATH_10.PATH_ID
JOIN VOLUMES on (
VOLUMES.VOLUME_ID = PATHS.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_1.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_2.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_3.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_5.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_6.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_7.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_8.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_9.VOLUME_ID
OR VOLUMES.VOLUME_ID = PATH_10.VOLUME_ID
)
WHERE VOLUMES.VOLUME_NAME IS NOT NULL and VOLUMES.VOLUME_NAME != ""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.