2011-11-21 44 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!