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 回答