0

データベースに type のフィールドがありますが、値textが含まれている可能性がありintegerます。

このフィールドからデータを選択するとき、整数かテキストかを区別する必要があります(<または>のようなmysql操作を処理するためだけに)

$clause = "";
if(is_int($_GET['f']))
   $clause = " AND myValue < ".$_GET['f']."  ";
else
   $clause = " AND myValue = '".$_GET['f']."'  ";

$ds->query("SELECT * FROM myTable WHERE id = 1 ".$clause);

整数でない場合は引用符に注意してください。

しかし、これは機能しません。フィールドには type があるため、正常だと思いますtext

この問題の解決策を教えてください。前もって感謝します !

4

3 に答える 3

2

タイプ列は常にそのtext値をテキスト (文字列) として扱うため、格納される値に関係なく、それを で囲む必要があります'。MySQL は数値を文字列として比較できます。

また、値は文字列と見なされるため、値is_intのチェックには適していません。代わりに$_GET使用してください。is_numeric

ただし、質問へのコメントに注意してください。データベースに整数や文字列を個別に保存する必要がある場合は、再設計が適しています。

于 2013-01-16T08:43:11.287 に答える
1

これを試して:

            $clause = "";
        if(is_numeric($_GET['f']))
           $clause = " AND myValue < ".$_GET['f']."  ";
        else
           $clause = " AND myValue = '".$_GET['f']."'  ";

        $ds->query("SELECT * FROM myTable WHERE id = 1 ".$clause);
于 2013-01-16T08:46:20.487 に答える
0

おそらくあなたのための解決策。Mysql はデータ型と演算子を処理します。たとえば、暗黙的な場合があります。

SELECT 1+'1';
   -> 2

私は自分のデータベースで遊んでいます。列 a を varchar として。次に、1 から 5 までの 5 つの値を入力します。クエリを実行select * from mytable where a > 2 すると、正しい結果が得られます (エントリ「1」は表示されません。「b」のような文字を含む新しい行を入力すると、この文字は結果に含まれません。または明示的な型キャストをいじることができます。

敬具

于 2013-01-16T08:58:39.450 に答える