我在将数据库插入数据库时使用Mysqli bind_param。
当我尝试插入一个名为“0737327373”的电话时,该值被插入为“737327373”而没有前导“0”。但是当我将bind_param(“i”)更改为bind_param(“s”)时,值正确地插入为“0737327373”。当我插入带有前导0的数字时,我应该使用“s”而不是“i”吗?
此外,我的值可以介于(0-5)和(0-1)之间,具体取决于用户在注册时检查的选项/复选框。
这些值是否也应该作为bind_param(“s”)插入,因为它们也可以是“0”。
对不起,如果看起来有点乱,我会尽力解释它,如果需要的话。
英语不是我的第一次憔悴,我还没有真正理解bind_param s / i函数,我认为“0”会算作int而不是字符串。
提前致谢。
答案 0 :(得分:3)
如果要在varchar字段中插入“数字”,则使用“s”。
在您的情况下,将电话号码作为整数插入是没有任何意义的,因为您可能不会对其进行任何数学分析而您会失去功能(例如,前导零)。
答案 1 :(得分:0)
您应该99%的时间使用bind_param("s", $phoneNumber)
。其他类型仅在特殊情况下存在,其中需要正确的类型才能使查询正常工作。
重要:绑定类型应该由SQL中的列/操作数类型决定,而不是由您拥有的数据决定。您的值是数字还是字符串都没有关系,重要的是在SQL中使用的上下文。
根据您的情况,您声称您的电话号码以零开头,但整数不能以零开头,除非它本身是零。这在数学上是错误的。 电话号码不是整数!它们是字符串。。您应该将电话号码存储在数据库的VARCHAR
列中。