2012-07-01 52 views
0

我需要一些指导。从我对MYSQL的阅读中了解到,要正确配置我的数据库并保持最佳运行状态,我需要按照以下步骤创建我的数据库。例如说我有有关如何正确存储信息的MySQL和PHP

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

好了,所以现在我知道我需要一个新的数据库名为DB:地址和另一个DB:电话

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地址,并将正确的address_ID记录在DB成员中? & &与DB Phone和DB成员中的phone_ID相同吗?

感谢您的帮助!

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

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

如何为地址DB和手机分配地址到手机数据库?我是否需要使用单独的插入语句?如果是这样,我怎样才能将他们正确的ID加入DB成员?

+0

关于#2:您应该能够在您使用的任何库(mysqli,PDO)中使用last_insert_id函数来获取所需的ID。 –

+0

我需要为此进行会话吗?如果多人同时参加会怎么样?这会影响我的last_insert_id函数吗? – fyz

回答

0

不要使用SHA()哈希的密码

From the MySQL reference manual:

漏洞的MD5和SHA-1算法已成为众所周知。您可能想要考虑使用本节中描述的其他加密函数 之一,而不是像SHA2()那样。

的mysql_ *功能套件不应继续使用

“不建议这个扩展编写新的代码,而是应该使用 要么库MySQLi或PDO_MYSQL扩展。 “ - PHP.net

现在,关于您的问题

这是一种有效的方式来建立我的数据库? & &这是正确的吗?

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

如果你真的只需要每个成员的一个地址和电话号码,你应该包括成员表的所有信息。这样可以防止不必要的连接,并且您始终可以指定想要的内容SELECT

如果你想要多个地址和电话号码,你仍然可能想要to denormalize,并且只用一张表来表示所有的数据。你只需要限制用户一些合理的地址或电话号码。

我该如何确保在表格中输入的地址分配给 DB地址,并且DB成员中记录了正确的address_ID? & & 对于DB Phone和DB成员中的phone_ID是否相同?

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

+0

我只是打算允许用户1的电话号码或地址 - 但谢谢你指出我的错误。所以为了澄清你的意思,DB电话和DB地址都应该有member_ID字段(而不是其他方式)。有道理 - 谢谢你再次提出的观点。至于把所有东西都放在一张桌子上 - 我读到的效率不高。考虑到如果结果==更多的速度,设置适当的表所花费的代码并不多。 Ty为您的回应。 – fyz

+0

不客气。效率问题在于,您将执行一个事务并执行**三个**插入语句而不是一个(在不需要事务的情况下)。此外,为了检索用户的电话和地址数据,你需要执行'SELECT * FROM members JOIN phone ON phone.member_id = members.Primary_ID JOIN address ON address.member_id = members.Primary_ID',而不仅仅是'SELECT * FROM members'。但是,基准测试可以准确地告诉你哪种方法的成本。 –