阻止在laravel查询构建器上对数据库执行insert语句

时间:2018-02-18 12:26:43

标签: php laravel laravel-5 laravel-5.4 query-builder

我有这样的查询构建器方法:

 public function export_excel($query)
    {
      return DB::select(DB::raw($query));
    } 

我想执行select语句而不是insertupdate语句

1 个答案:

答案 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)。这似乎是这三者中最强大的(当然   最好记录的)

来自sql-parser-in-php

但正如@AlonEitan指出的那样,Transaction和Rollback可以完成这些工作,但无法避免CREATE或DROP(在MySQL上)。

可能是exec使用 ReadOnly 帐户查询可以解决没有风险/开销执行的问题。