MySQL如何检查值是整数还是字段中的文本

时间:2013-01-16 08:35:19

标签: php mysql text integer

我的数据库中有一个字段text,但可能包含一些integer值。

当我从这个字段中选择数据时,我应该区分if是整数还是文本(只是为了处理像<或>这样的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);

请注意引用,以防它不是整数。

但这不起作用,我认为这是正常的,因为该字段的类型为text

请帮您解决此问题。提前谢谢!

3 个答案:

答案 0 :(得分:2)

text类型列始终将其值视为文本(字符串),因此无论存储什么值,都需要将其括在'中。 MySQL可以将数字作为字符串进行比较。

此外,is_int不适合检查$_GET值,因为它们被视为字符串。请改用is_numeric

但请注意您的问题的评论,如果您需要在数据库中单独存储整数和/或字符串,则重新设计更合适。

答案 1 :(得分: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);

答案 2 :(得分:0)

也许是你的解决方案。 例如,Mysql处理数据类型和运算符有时是隐式的。

SELECT 1+'1';
   -> 2

我正在玩我的数据库。列a为varchar。然后我输入从1到5的5个值。如果我查询select * from mytable where a > 2我得到了正确的结果(条目&#39; 1&#39;没有显示。如果我输入一个字符如&#的新行34; b&#34;此字符不在结果中。 或者你可以使用显式类型转换。

亲切的问候