自己作孽呀.领到让写个管理员操作数据库的日志函数,记录管理员修改和删除数据库的记录,主要是记录修改以前有什么记录.万一被人搞了还能恢复.
我自己想别人方便点, 写一个函数 放在别人的sql 之后 query 之前. 让别人传进来 SQL 语句 函数自动分析. 得出 这个SQL 是要修改还是删除. 然后分析出删除修改的条件.如果是修改再分析出 SET 后和where 之间 ,需要修改的字段和值.
看似简单,开始写没事.最后发现很困难了.比如:
1.update user set name='dd' where id=1
这很好办 很好解析.
2.update user set name='dd=12,33,445553,2=21' ,p='dddd,ffg=3' where id =1
这个也好办 根据 set 和 where 来截取 再分析里面的 根据 '号的 配对情况 得到字段和值,再去先去搜索原值 再去执行updete 去修改成新值.
3. update user set name='sddsd where ddd set \'dd = d,,d=3' ,p='sddsd where ddd set \'dd = d,,d=3' where ss='22' and ff='dd and 2'
这个直接就傻了. 字符串中什么情况都可能的 .这个分析就难了.用什么来截取都不行了. 一位一位移动字符串读取来分析也不行了.
晕倒了 怎么办????
我自己想别人方便点, 写一个函数 放在别人的sql 之后 query 之前. 让别人传进来 SQL 语句 函数自动分析. 得出 这个SQL 是要修改还是删除. 然后分析出删除修改的条件.如果是修改再分析出 SET 后和where 之间 ,需要修改的字段和值.
看似简单,开始写没事.最后发现很困难了.比如:
1.update user set name='dd' where id=1
这很好办 很好解析.
2.update user set name='dd=12,33,445553,2=21' ,p='dddd,ffg=3' where id =1
这个也好办 根据 set 和 where 来截取 再分析里面的 根据 '号的 配对情况 得到字段和值,再去先去搜索原值 再去执行updete 去修改成新值.
3. update user set name='sddsd where ddd set \'dd = d,,d=3' ,p='sddsd where ddd set \'dd = d,,d=3' where ss='22' and ff='dd and 2'
这个直接就傻了. 字符串中什么情况都可能的 .这个分析就难了.用什么来截取都不行了. 一位一位移动字符串读取来分析也不行了.
晕倒了 怎么办????
解决方案 »
- php+sns
- 关于多语言网页处理问题.....急切!!望帮忙
- APACHE启用了mod_rewrite功能对url进行转向处理,如何在程序里获得原来真实的URL地址?
- PHP在线文件管理器的问题
- 提出数据库里的数据问题,急,谢谢
- 使用HTTP_POSE_VARS['name']接受post传来参数的一个问题
- 急问在php中做表单提交时如何将当前时间(包括年月日分秒)作为一个表项赋值给updatetime这个自设变量?多谢多谢
- 如何实现用户在登陆好以后一定时间内若没有活动,其session自动过期?
- 数据库遍历问题,帮忙看看
- 关于表单提交的问题
- 细说PHP--兄弟连 pdf 下载
- php学校刚出来有多少米?
相当于你 第一句这么写 update user set name='dd\'asdasdasdasd' where id=1
这需求也用代码去实现,是不是太蛋疼了些。
这个问题是这样的如果你在php里赋值:$sql="update user set name='sddsd where ddd set \'dd = d,,d=3' ,p='sddsd where ddd set \'dd = d,,d=3' where ss='22' and ff='dd and 2' ";这样是不对的。因为字符串内存中实际上是:update user set name='sddsd where ddd set 'dd = d,,d=3' ,p='sddsd where ddd set 'dd = d,,d=3' where ss='22' and ff='dd and 2' 这是一个错误的sql语句,所以赋值时是应该写成$sql="update user set name='sddsd where ddd set \\'dd = d,,d=3' ,p='sddsd where ddd set \\'dd = d,,d=3' where ss='22' and ff='dd and 2' ";这样的sql是可以执行的,同时你也是可以读到\这个字符的,就可以分析了。