2012-03-08 78 views
0

想知道,如果存在关于如何根据mysql数据类型验证特定值/变量的任何类,函数或ideia。针对MYSQL数据类型检查PHP变量类型

我们在PHP中得到了is_int()IS_STRING()is_float()等等等等...但是我们没有他们。或者我们呢?任何备忘单?有什么想法吗?

编辑: 点基本上是:

  • 转到trought值的阵列(从CSV正在添加例如)。
  • 我知道什么表,并有所有的列信息(数据类型很好)(与adodb)。
  • 只是检查各值在一个特定的列适合...
+1

为什么你这样做?如果你不知道MySQL表中存储的每个字段的数据类型,那么你做错了什么。如果您真的想抽象出东西,请使用ORM库。 – Bojangles 2012-03-08 00:49:50

+0

您从哪里获得需要检查类型的数据? – zerkms 2012-03-08 00:51:04

+1

我不清楚你正在寻找什么。 。 。你是否试图为逃避查询处理类型检测,或者判断数据是否被允许在特定类型中? 值得一提的是,PHP中的某个值可以匹配MySQL中的许多不同类型 - 例如,值“15.46”可以是任何字符串类型(包括SET/ENUM的值),或者数字类型的编号(例如DECIMAL,FLOAT和DOUBLE)。所以我们需要知道更多的细节给你任何类型的有意义的答案。 – justbeez 2012-03-08 00:53:27

回答

1

如果数据是从一个CSV文件来了,你要记住,所有的值将是字符串(甚至是数字字符串仍然有一个字符串类型)。

所以你不能使用is_int()/is_float() /等,因为只有告诉你的或变量。您可以使用is_numeric()来检查值,但是这将允许像“+ 0123.45e6”这样的指数表示法。有时ctype_digit()可以用于测试整数出于这个原因,因为它只会允许数字0-9出现在一个字符串中,以便它返回true。

正则表达式也可以用来识别基于模式的数据类型,但你必须与大型数据集时,观看的性能开销。从性能角度来看,几乎总是建议使用preg_函数族而不是ereg函数。

如果您正在验证诸如ENUM或SET类型的东西,那么您可能需要创建一个包含合法值的数组(或将其提取为查询),然后使用in_array()检查它们的值。

对于CHAR/VARCHAR字段,你可以解析列定义,然后检查值的长度是否在限制范围内。

如果NULL类型被允许在任何你列的,你想也需要检查这种情况(也可能映射为空值或字符串“NULL”,以实际NULL值)。

如果你正在寻找正确居然逃脱这些值,考虑使用预处理语句和PDO(PHP数据对象)扩展。这允许MySQL根据类型正确地转义数据。 (您也可以使用与库MySQLi预处理语句。)

如果你正在寻找特定的数据类型,以及如何识别它们,那么你可能需要编辑你的问题,以促进更完整的答案。

+0

我不知道如何编辑,所以我可以更好地解释我需要什么。无论如何,这里的所有好的和有效的点。我所假设的是,我从一开始就认为,我需要为我的目的编写一个函数,并通过所有的可能性。只是希望有一个解决方案。至于第一点,所有字段都是字符串,但“someword”字段不适合mysql DATETIME,也不适合INT中的“123.487”...对吗?无论如何,我会等待一段时间,并做更多的研究,并可能会接受你的回答:) – eduardev 2012-03-08 01:29:54