我有这样的查询构建器方法:
public function export_excel($query)
{
return DB::select(DB::raw($query));
}
我想执行select
语句而不是insert
或update
语句
答案 0 :(得分:2)
您可以解析$ query检查是否有不需要的INSERT / UPDATE / etc.使用sql解析器。
梨:http://pear.php.net/package/SQL_Parser(还是相当新的)
txtSQL:http://sourceforge.net/projects/txtsql
PHP-SQL-Parse:http://code.google.com/p/php-sql-parser/(如上所述 由OP)。这似乎是这三者中最强大的(当然 最好记录的)
但正如@AlonEitan指出的那样,Transaction和Rollback可以完成这些工作,但无法避免CREATE或DROP(在MySQL上)。
可能是exec使用 ReadOnly 帐户查询可以解决没有风险/开销执行的问题。