[请益] 如何使用php确认一段SQL可以运作

楼主: Thitta (胖胖 )   2015-01-26 05:57:00
大家好,小弟是一个业余的PHP工程师,目前在开发公司内部的一些小工具。
其中有一个功能是让使用者输入一段SQL,并记录在数据库当中。读取的时候PHP会执行
SQL并产生web表格。之后要调阅这张报表的时候就不用丢数据库。也比较好和非程式人
员分享。
例如一张被储存起来的员工年资报表
SELECT
name
,years
FROM employees
想请问的问题是,我要怎么用php检查我从表单上收到的SQL是可执行的呢?
(可执行/不可执行就return TRUE/FALSE)
有没有比较严谨或正规的做法?
(如果是直接把SQL拿去执行,系统会直接报错)
感谢前辈们不吝指导。
PS. 我是用LAMP+CI开发
作者: GALINE (天真可爱CQD)   2015-01-26 09:57:00
一个可能的作法是,执行 "EXPLAIN {$sql}",看会不会喷错然后直接让使用者对 DB 下 SQL ,在某些公司会被砍头的...想一下如果有人下“DROP employees”会怎样[汗]
作者: rockmanalpha (KIN)   2015-01-26 09:59:00
不太懂你的意思 你是怕表格传过来的SQL太危险?
作者: GALINE (天真可爱CQD)   2015-01-26 09:59:00
之前看过的作法是,把需要做报表的资料 dump 到独立的 DB
作者: GALINE (天真可爱CQD)   2015-01-26 10:00:00
然后那个 DB 让使用者乱玩,而且这样也可以控制敏感资料
作者: rockmanalpha (KIN)   2015-01-26 10:00:00
SELECT的权限 然后那个PHP连接MYSQL时就用这个用户
作者: GALINE (天真可爱CQD)   2015-01-26 10:01:00
用帐户控制也是一种作法...不过 user 下的 SQL 不会太好看如果卡 DB 就麻烦了
作者: rockmanalpha (KIN)   2015-01-26 10:02:00
G大不好意思 插楼了
作者: GALINE (天真可爱CQD)   2015-01-26 10:02:00
之前看过更花俏的搞法是,Excel 连 MS SQL Server然后就可以用 VB 下 SQL 然后搞些枢纽分析表什么的...
作者: onininon (万)   2015-01-26 10:11:00
作者: LaPass (LaPass)   2015-01-26 11:07:00
我问一下,谁可以输入sql? 这听起来很危险....
作者: carylorrk (carylorrk)   2015-01-26 18:41:00
内部工具可以输入 SQL 很正常啦...重点是控管好权限。像是 ERP 里自定表格或是 phpmyadmin 这类的都有啊语法上的正确性可以用 parser,能否正确执行就上面所述如果是安全性考量就根本不该让人直接执行 SQL。
作者: TobyH4cker (Toby (我要当好人))   2015-01-26 19:18:00
原PO想问的是执行之后有没有错误的话,query完return如果是false就是失败了然后你只要handle这个错误然后回报有错误就可以了小弟是新手,以上方法可能不是严谨做法
作者: GALINE (天真可爱CQD)   2015-01-26 23:33:00
phpmyadmin是方便管机器的人,不是方便使用者的 XDERP 的例子有看过,不过个人觉得那不是什么好习惯..不过考虑到需求单位可以直接处理资料,有时候还是要开门..只是开门之后怎么样不会出大包就是另一个问题。例如今天有人对某个MyISAM的大TABLE下没有index的查询,马上有感
作者: xdraculax (首席怪叔叔)   2015-01-27 03:16:00
能输入SQL的都是有权限的工程师吧,是否正确他们自己负责就好啦,执行有出错的话就直接把错误秀在UI上

Links booklink

Contact Us: admin [ a t ] ucptt.com