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

Php MySQL如何检查字段中的值是整数还是文本,php,mysql,text,integer,Php,Mysql,Text,Integer,请在我的数据库中有一个类型为text的字段,但该字段可能包含一些整数值 当我从这个字段中选择数据时,我应该区分是整数还是文本(只是为了处理像)这样的mysql操作),所以我尝试了: $clause = ""; if(is_int($_GET['f'])) $clause = " AND myValue < ".$_GET['f']." "; else $clause = " AND myValue = '".$_GET['f']."' "; $ds->query("

请在我的数据库中有一个类型为
text
的字段,但该字段可能包含一些
整数

当我从这个字段中选择数据时,我应该区分是整数还是文本(只是为了处理像<或>)这样的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);
$clause=”“;
if(is_int($_GET['f']))
$clause=“和myValue<”$\u GET['f']”;
其他的
$clause=“AND myValue=”。$\u GET['f']。“”;
$ds->query(“从myTable中选择*,其中id=1”。$子句);
请注意引号,以防它不是整数

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


请你有解决这个问题的办法。提前谢谢

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

另外,
is_int
不适合检查
$\u GET
值,因为它们被视为字符串。改为使用
是数字的


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

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

另外,
is_int
不适合检查
$\u GET
值,因为它们被视为字符串。改为使用
是数字的

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

尝试以下方法:

            $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);
$clause=”“;
如果(是数字($\u GET['f']))
$clause=“和myValue<”$\u GET['f']”;
其他的
$clause=“AND myValue=”。$\u GET['f']。“”;
$ds->query(“从myTable中选择*,其中id=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);
$clause=”“;
如果(是数字($\u GET['f']))
$clause=“和myValue<”$\u GET['f']”;
其他的
$clause=“AND myValue=”。$\u GET['f']。“”;
$ds->query(“从myTable中选择*,其中id=1”。$子句);

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

SELECT 1+'1';
   -> 2
我在玩弄我的数据库。列a作为varchar。然后输入从1到5的5个值。如果我从a>2的mytable中查询
select*,我会得到正确的结果(条目“1”不会显示。如果我输入了一个像“b”这样的字符的新行,则结果中不包含该字符。
或者您可以使用显式类型转换


亲切问候

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

SELECT 1+'1';
   -> 2
我正在处理我的数据库。a列作为varchar。然后我输入5个从1到5的值。如果我从a>2的mytable中查询
select*,我会得到正确的结果(条目“1”不会显示。如果我输入一个像“b”这样的字符的新行,则结果中不包含该字符。
或者您可以使用显式类型转换


善意的问候

如果你可以在DB字段中同时包含整数和字符串,并且你必须以不同的方式解释它们,那么你就犯了一些错误。这不是一个规范化的结构。我建议重新设计。为不同的数据创建两列,并根据@ppeterka使用它。为varchar和anot创建一列这个字段、这个文本和这些整数是什么意思?你能把表格结构粘贴到这里吗?如果是数字,你还必须检查db字段。你可以在这里摆弄;o)如果在DB字段中可以同时包含整数和字符串,并且必须以不同的方式解释这两个值,那么您就犯了很大的错误。这不是一个规范化的结构。我建议重新设计。为不同的数据创建两列,并按照@ppeterka的要求使用。一列用于varchar,另一列用于int。这是什么这个字段、这个文本和这些整数的含义是什么?你能把表结构粘贴到这里吗?如果是数字,你还必须检查db字段。你可以在这里摆弄;o)