【问题标题】:What mysqli value for bind_param() i or sbind_param() i 或 s 的 mysqli 值是多少
【发布时间】:2013-11-05 18:36:45
【问题描述】:

当我将东西插入我的数据库时,我正在使用 mysqli bind_param()

当我尝试将电话号码插入为“0737327373”时,值被插入为“737327373”,没有前导“0”。但是当我将bind_param("i", $phoneNumber) 更改为bind_param("s", $phoneNumber) 时,值被正确插入为“0737327373”。那么当我插入带有前导 0 的数字时,我应该使用“s”而不是“i”吗?

此外,我的值可能介于 (0-5) 和 (0-1) 之间,具体取决于用户在注册期间检查的选择/复选框。

这些值是否也应该作为 bind_param("s") 插入,因为它们也可能是“0”。

【问题讨论】:

  • 如果它是一个字符串使用s。查看数据库中的数据类型
  • 使用“i”与使用(int)arg大致相同。

标签: php mysqli bindparam


【解决方案1】:

如果您要在 varchar 字段中插入“数字”,那么可以,使用“s”。

在您的情况下,将电话号码作为整数插入没有实际意义,因为您可能不会对其进行任何数学分析并且您会失去功能(例如前导零)。

【讨论】:

  • 我不会做任何分析,我几乎只是在插入之前删除除数字之外的任何内容。现在我注意到它在数据库中被设置为 varschar。但是对于 0 - 5 之间的值。我应该使用 bind_param("i") 吗?它们的 DB 值也是 int
  • 如果你将它们作为整数存储在数据库中,那么它应该是 bind_param('i')
【解决方案2】:

您应该在 99% 的时间使用bind_param("s", $phoneNumber)。其他类型仅用于查询工作需要正确类型的特殊情况。

重要提示:绑定类型应由 SQL 中的列/操作数类型决定,而不是由您拥有的数据决定。你的值是数字还是字符串并不重要,重要的是它在 SQL 中使用的上下文。

在您的情况下,您声称您的电话号码以零开头,但整数不能以零开头,除非它本身是零。这在数学上是错误的。 电话号码不是整数!它们是字符串。您应该将电话号码存储在数据库的VARCHAR 列中。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2013-04-13
    • 2016-03-03
    • 1970-01-01
    • 2021-05-27
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多