2011-11-21 79 views
0

所以我们可以说我有可变像这样的:将字符串转换成可执行命令

$q = "DB::select('id')->from('reports')->where('field', '=', 'value');"; 

现在我怎么可以删除" "或做一些事情,会使其可执行查询?

$q = DB::select('id')->from('reports')->where('field', '=', 'value'); 

btw我使用kohana框架,但我不认为这很重要,因为它是一个简单的PHP代码。

+3

您可以使用['eval'(http://us2.php.net/manual/en/function.eval.php),但我会找到一个更好的通过先将代码解析为代码来构建查询的方法。 –

+0

基本的经验法则:如果你需要使用'eval()',你正在做的事**非常错误**。 – kba

回答

6

您可以使用eval来完成。 Eval被认为是非常有害的,因此请确保在考虑使用eval之前清理所有物品。

+0

你是什么意思'消毒'? – Linas

+0

@Linas Sanitize意味着清理字符串,因此您始终知道它包含的内容。 'eval()'将字符串的内容评估为PHP方法,因此除非您对它进行了清理,并且您的用户对其包含有任何伤害,否则最终可能会导致您的网站遭到入侵。 – kba

1
$q = "DB::select('id')->from('reports')->where('field', '=', 'value');"; 
eval('$q = ' . $q); 

来源:http://php.net/eval

PS:避免使用eval,当你不是100%确定有关,这将是内容eval'ed。 levenshtein之间肯定有一个原因,邪恶只有1!