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



请我有一个字段在我的数据库与类型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);

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

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

请给出解决这个问题的方法。

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

同样,is_int不适合检查$_GET的值,因为它们被认为是字符串。用is_numeric代替。

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

试试这个:

            $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);

也许可以解决你的。例如,Mysql处理数据类型和操作符有时是隐式的。

SELECT 1+'1';
   -> 2

我正在玩我的数据库。列a作为varchar。然后输入从1到5的5个值。如果我查询select * from mytable where a > 2,我会得到正确的结果(不显示条目'1')。如果我输入一个字符为"b"的新行,这个字符不在结果中。或者您可以使用显式类型转换。

亲切的问候

相关内容

  • 没有找到相关文章

最新更新