【问题标题】:PHPmyadmin field typePHPmyadmin 字段类型
【发布时间】:2016-11-05 00:24:24
【问题描述】:

我想让用户选择在我使用 android studio 创建的应用程序中输入电话号码,但是在 phpmyadmin 上输入的正确字段类型是什么?例如 varchar、int 等。

在我的 php 代码中,我是否像我为用户名和密码或其他不同的东西一样将它作为字符串?

$statement = mysqli_prepare($con, "INSERT INTO user (username,password, phone) VALUES (?, ?, ?)");
mysqli_stmt_bind_param($statement, "ss",$username, $password);

【问题讨论】:

  • 取决于电话号码格式。如果您使用纯数字,例如0123456 然后你可以使用int 否则如果你使用像0-123-456 这样的格式,则需要varchar 等。
  • 我想放纯数字,但如果用户不放纯数字怎么办?
  • 您将需要使用一些 javascript 来进行一些客户端验证,以阻止它们使用除数字之外的任何内容。否则,bind_param 将无法将非 int 变量绑定到 int 引用(当您将 'i' 放入 bindparm 时)
  • 有没有办法可以使用任何一种格式?
  • 使用字符串,如果用户只使用数字或者你可以强制 int->string 转换是安全的/开始抛出错误,php 将足够聪明地在以后更改类型:) 但是明智的做法是强制使用一种通用格式,以便以后无论出于何种原因需要进行处理。

标签: php android mysql


【解决方案1】:

电话号码尽管包含数字,但不是号码。这不算什么,你不会用它做数学。我绝对认为您应该将其存储为 char(或者可能是 varchar,请参阅下面的扩展)。尝试将非数字存储在数字数据类型中可能会产生意想不到的后果(例如,如果 - 违反常规 - 用户输入以 0 开头的电话号码会发生什么?)。某些数据类型可能会引入舍入错误。

您可以进行客户端或服务器端验证,以确保格式与您希望在数据库中存储它们的方式相匹配(例如,555-123-4567(555) 123-45675551234567)。就我个人而言,我会去掉所有格式,如破折号、空格和括号以进行存储,然后在展示时您可以根据客户设置、业务目的或最终用户偏好对其进行格式化。

如果您有任何机会存储扩展名 (555-123-4567 x890) 或来自任何其他国家/地区的电话号码,您可能应该使用具有足够字符的 varchar 以包含所有可能性。我只是碰巧在我的示例中使用了美国电话号码,但是如果来自英国的人想要将他们的国际号码放入我的数据库中,我需要为他们的更长的号码和国家/地区代码留出足够的字符空间。

mysql datatype for telephone number and address 有一些有趣的讨论(和不同的意见)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    相关资源
    最近更新 更多