关于如何正确存储信息的MySQL和PHP

时间:2012-07-01 03:54:17

标签: php mysql

我需要一些方向。从我对MYSQL的阅读中我了解到,要正确配置我的数据库并使其保持最佳运行,我需要按照以下方式制作我的数据库。比方说我有

DB Members: which holds~ 1-Primary_ID, 2-email, 3-password, 4-address_ID, and 5-phone_ID. 

好的,现在我知道我需要创建一个名为DB:address的新数据库和另一个DB:phone

DB Address: which holds~ 1-address_ID(UNIQUE), 2-street, 3-city, 4-state, 5-zip

最后另一个DB:电话

DB Phone: which holds~ 1-phone_ID(UNIQUE), 2-area code, 3-phone

问题#1:这是设置数据库的有效方法吗? &安培;&安培;这是对的吗?

问题2:使用PHP从HTML表单中插入记录时。如何确保将表单中输入的地址分配给DB地址,并在DB成员中记录正确的address_ID? &安培;&安培; DB Phone和DB成员中的phone_ID是一样的吗?

感谢您的帮助!

我的mysql_query语句应该是什么样的?

mysql_query("INSERT INTO Members (email, password, address, phone, timeStamp) 
VALUES('$email', 'SHA($pass)', '$address', '$phone', now())");

如何为地址数据库和手机数据分配地址?我需要使用单独的插入语句吗?如果是这样的话 - 我如何将他们正确的ID带入数据库成员?

1 个答案:

答案 0 :(得分:0)

请勿使用SHA()哈希密码

From the MySQL reference manual:

  

已知MD5和SHA-1算法的漏洞利用。你可以   希望考虑使用所描述的其他加密功能之一   而在本节中,例如SHA2()。

不应继续使用mysql_ *函数套件

  

“建议不要使用此扩展名来编写新代码。相反,   要么使用mysqli或PDO_MySQL扩展名。“ - PHP.net

现在,关于您的问题

  

这是设置数据库的有效方法吗? &安培;&安培;这是对的吗?

这取决于。您是否打算每个用户只有一个电话号码,每个用户只有一个地址?通过在成员表上指定address_ID字段,可以有效地将成员可以限制为1的地址数量限制为一个。或者,如果您想允许用户拥有任意数量的地址或电话号码,则电话和地址表应该引用该成员 - 而不是相反。

如果你真的只需要每个成员一个地址和电话号码,你应该在成员表中包含所有这些信息。这样可以防止不必要的连接,您可以随时指定SELECT

如果您需要多个地址和电话号码,您仍然可能需要to denormalize,并且只需使用一个表来存储所有数据。您只需将用户限制在一些合理数量的地址或电话号码即可。

  

如何确保分配表格中输入的地址   DB地址和正确的address_ID记录在DB成员中? &安培;&安培;   DB Phone和DB成员中的phone_ID是一样的吗?

如果您使用mysqli,请使用insert_id property。如果您使用PDO,请使用lastInsertId() method