1

あなたの助けが必要です。

特定の演算子を選択した後、MySQL データベースを照会するために使用する PHP コードがあります。ドロップダウン リストにある演算子は、「LESS THAN、GREATER THAN、および EQUALS」です。私が抱えている問題は次のとおりです。どの演算子を選択しても、データベースから得られる結果は常に「LESS THAN」演算子のものです。つまり、"LESS THAN"、"GREATER THAN"、"EQUALS" のいずれを選択しても同じ結果が得られます。問題を特定しようとしましたが、失敗しました。私が使用するコードは次のとおりです。

            if ($op='LESS THAN') {
        $query = "SELECT * FROM tbl_reservoir WHERE res_vol < '$vol'";
    } elseif ($op='GREATER THAN') {
            $query = "SELECT * FROM tbl_reservoir WHERE res_vol > '$vol'";
    } elseif ($op='EQUAL') {
         $query = "SELECT * FROM tbl_reservoir WHERE res_vol = '$vol'";
    } 

$op は演算子を保持する変数で、"res_vol" はデータベース テーブルから比較するフィールドです。

4

2 に答える 2

1

あなたはあなたの状態で使用する==必要があります===if

if ($op == 'LESS THAN')
{
  // code here
}
elseif ($op == 'GREATER THAN')
{
  // code here
}
// .......
于 2012-09-17T00:45:29.607 に答える
1

=等値演算子 ( ) が必要な場所で代入演算子 ( ) を使用している==ため、コードは次のようになります。

        if ($op=='LESS THAN') {
    $query = "SELECT * FROM tbl_reservoir WHERE res_vol < '$vol'";
} elseif ($op=='GREATER THAN') {
        $query = "SELECT * FROM tbl_reservoir WHERE res_vol > '$vol'";
} elseif ($op=='EQUAL') {
     $query = "SELECT * FROM tbl_reservoir WHERE res_vol = '$vol'";
} 

ただし、これを次のように単純化できます。

static $map = array('LESS THAN' => '<', 'GREATER THAN' => '>', 'EQUAL' => '=');
if (!isset($map[$op])) {
    throw new Exception(sprintf("Unexpected operator '%s', $op));
}
$query = sprintf("SELECT * FROM tbl_reservoir WHERE res_vol %s '$vol'", $map[$op]);
于 2012-09-17T00:46:19.743 に答える