Davical添加组出现SQL语法错误,无法添加用户到组
问题解决:Davical创建组后访问组页面出现SQL语法错误
问题分析
从PostgreSQL错误日志的SQL语句可明确定位问题:
SELECT principal_id, coalesce(displayname,fullname,username) FROM dav_principal WHERE principal_id NOT IN (SELECT member_id FROM group_member WHERE group_id = 1019) AND principal_id != 1019ORDER BY 2
语句中1019ORDER部分缺失空格,导致PostgreSQL解析时将1019与ORDER识别为非法标识符,触发42601语法错误。这是动态拼接SQL字符串时的逻辑bug,根源为当前版本的Davical或其依赖的AWL库对PHP8.1兼容性不足。
解决方案
方案1:手动修复代码中的SQL拼接问题
根据栈跟踪信息,错误出现在组成员选项列表的构建逻辑中,需补全缺失的空格:
- 打开文件
/usr/share/davical/inc/ui/principal-edit.php - 定位到
edit_group_row函数内,找到类似principal_id != ' . $group_id . 'ORDER BY的代码行 - 在
$group_id与ORDER之间添加空格,修改为principal_id != ' . $group_id . ' ORDER BY - 保存文件后重启PHP-FPM服务:
sudo systemctl restart php8.1-fpm
方案2:升级Davical和AWL库到兼容PHP8.1的版本
当前使用的Davical 1.1.11-1与libawl-php 0.63-1版本较旧,对PHP8.1支持不完善,可通过升级解决:
- 添加Davical官方PPA(未添加时执行):
sudo add-apt-repository ppa:davical-maintainers/davical sudo apt update - 升级相关组件:
sudo apt upgrade davical libawl-php - 重启服务生效:
sudo systemctl restart php8.1-fpm nginx
方案3:临时降级PHP版本(可选)
若上述方案无法实施,可将PHP降级至对Davical 1.1.11兼容性更好的7.4版本:
- 添加第三方PHP PPA:
sudo add-apt-repository ppa:ondrej/php sudo apt update - 安装PHP7.4及所需扩展:
sudo apt install php7.4-fpm php7.4-pgsql php7.4-xml php7.4-mbstring - 修改Nginx配置,将FastCGI路径切换为
unix:/run/php/php7.4-fpm.sock - 重启服务:
sudo systemctl restart php7.4-fpm nginx
内容的提问来源于stack exchange,提问作者user21743841
相关产品推荐
相关产品推荐

