·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹📱AI全功能
×

00:00:00

您有一张10元限时体验卡,马上领取获得VIP尊享特权。

新人帖 使用原生DELET语句无空格时无法删除数据的问题 New

2026-1-16 13:52 来自 浅生 发布 @ Discuz! X3.5专区

1. 问题:



我使用DELETE语句删除数据的时候,如果引号内两侧不留空的时候,删除就不会执行,比如,下面这样就可以成功从数据库中删除:delpsqlf="DELETEFROMdatatable WHERE sid = sid";DB::query(delpsqlf);而下面这样,显示已执行,但数据库中的数据并未删除,数据库也无报错:delpsqlf="DELETEFROMdatatable WHERE sid = sid";DB::query(delpsqlf);


2. 千问的回答:



针对上述问题,我将discuz_database.php发给千问,给的结果为:


通过分析您提供的PHP类代码,我发现问题出在Discuz框架的SQL安全检查机制上。让我为您详细解释:


问题根源


问题主要出现在discuz_database_safecheck::checkquery()方法中,这个方法负责SQL语句的安全检查。关键代码如下:


$cmd = strtoupper(substr(trim($sql), 0, 3));if(isset(self::$checkcmd)) {    $check = self::_do_query_safe($sql);}


这里self::$checkcmd定义为:


protected static $checkcmd = array('SEL'=>1, 'UPD'=>1, 'INS'=>1, 'REP'=>1, 'DEL'=>1);


具体分析


当SQL语句有前后空格时(" DELETE FROM table WHERE sid = sid"):trim(sql)会移除前后空格,得到"DELETE FROM table WHERE sid = sid"substr(trim(sql), 0, 3)返回"DEL""DEL"在checkcmd数
  • 最近查阅:

免责声明:

DZ插件网AI平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;

最新热评 加载中...
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:216.73.216.99,GMT+8, 2026-2-26 17:12 , Processed in 2.365144 second(s), 40 queries , Gzip On, Redis On.

Powered by Discuz! X5.1 Licensed

© 2001-2026 Discuz! Team.

关灯
扫一扫添加微信客服
QQ客服返回顶部
返回顶部