2012-09-09 27 views
0

我有几个关于使用PHP和MySQL的安全数据存储的问题。使用MySQL表中的列信息来输入PHP数据

首先,我在查询或保存任何数据到数据库之前使用PDO并准备好语句,特别是Digg创建的包装器。

它建议在将所有数据发送到预准备语句之前先对所有数据进行类型转换。

  1. 这是必要的吗?如果是这样的话......

  2. 有没有一种方法可以检索特定表的列信息,在实际发送之前,根据表的字段信息构建一个自动类型化数据的“过滤器”它到了现场?

例如,假设我有一个表叫玩家,这些列:

  1. ID - INT(11)
  2. 手柄 - VARCHAR(100)
  3. 国家 - 炭( 2)
  4. TEAM_ID - INT(11)
在PHP

,之前我保存或更新一出戏呃,假设在保存数据之前对数据进行类型转换是一种很好的做法,那么是否有一种函数会自动将MySQL数据类型映射到PHP数据类型?

这样我就可以做类似settype($ my_var,$ data_type_from_matching_table_field)的东西。

或者我应该用一堆开关盒创建一个类吗?

+0

是的我听说过,我不是粉丝。 PHP自动类型转换中的大多数值,即字符串“1”在内部处理为int 1.第二个PDO具有多种绑定值的方法,用于准备好的语句对象,并且这些方法都支持您希望添加的类型。 PDO :: PARAM_STR,PDO :: PARAM_INT等。严格地说,是的,这是一个好习惯;) – dbf

回答

0
  1. 在大多数情况下,这是没有必要的。有几个边缘情况我发现它是必要的:在MySQL日期/日期时间/时间戳和PHP日期时间之间进行转换,在MySQL集合和PHP数组之间进行转换,以及将具有__toString的对象转换为实际字符串,以利于MySQL。但是,如果您选择在PHP端使用这些稍微不寻常的数据类型,那么所有这些都是必需的。正如你所提到的,这是可能的,但我知道的唯一方法是解析“SHOW COLUMNS”或“SHOW FIELDS”查询的输出,并在长开关语句中使用该数据。我建议这样做只是为了处理少数您最喜欢的数据类型与MySQL不一致的特殊情况,并且不会打扰PHP内置类型转换可以正确处理事情的多种情况。

相关问题