2011-05-09 57 views
0

我有一個存儲各種類型的運算符和值,使像如何使php表達式和從數據庫執行?

if(mydBVal1 mydBExpression mydBval2) 
{ 
    // do something....! 
} 

下面的表達式是我的代碼這就是節目和例子我想說的和幫助數據庫表我需要 如:

$data['myValue'] = 100; 
$data['operator'] = "<"; 
$data['comparison_value'] = 150 

if($data['myValue'] . $data['operator'] . $data['comparison_value']) 
{ 
    ///do something...... 
} 

我希望如果條件被認爲是if(100 < 150){},但if條件表達式工作不正常!

這裏的任何一個人都知道如何讓它工作?

+0

給定了有限的比較運算符,只需使用''就可以開關'在$ data ['operator']的值 – Phil 2011-05-09 11:45:20

回答

2

我想你想使用eval()函數。

雖然可以允許用戶執行不希望他們使用的PHP代碼,但在對數據庫中的數據進行評估之前應非常小心。

$data['myValue']=100; 
$data['operator']="<"; 
$data['comparison_value']= 150; 

$eval = sprintf("return(%d %s %d);", $data['myValue'], $data['operator'], $data['comparison_value']); 

if(eval($eval)) 
{ 
0

您也可以看看到PHP斷言

php.net/assert

<?php 

var_dump(assert("1 == 1")); 
var_dump(assert("1 === null")); 

?> 

示例代碼我用我的相關項目:

$assert_statement = 
      (($typecriteria != 'IS_NULL' || $typecriteria != 'NOT_NULL') ? "'".$value."'" : '') 
      . " " . $typecriteria . " '" . $criteriavalue."'"; 
      // Active assert and make it quiet 
      assert_options(ASSERT_ACTIVE, 1); 
      assert_options(ASSERT_WARNING, 0); 
      assert_options(ASSERT_BAIL, 0); 
      assert_options(ASSERT_QUIET_EVAL, 1); 
      if ($debug >= 1) { 
       print __METHOD__." assert debug ".$assert_statement."<br>"; 
       var_dump(assert($assert_statement)); 
      } 

      if (assert($assert_statement) === true) 
      { 
       return true; 
      } 
+0

值得注意的是,PHP文檔中提到:'斷言只能用作調試功能。您可以使用它們進行健全性檢查,測試的條件應始終爲TRUE,並且如果不是,則會指示一些編程錯誤,或檢查是否存在某些功能,如擴展功能或某些系統限制和功能。 – 2011-09-18 13:47:59