请我有一个字段在我的数据库与类型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"的新行,这个字符不在结果中。或者您可以使用显式类型转换。
亲切的问候