我目前正在为用户登录脚本编写代码。该脚本还具有一个选项,用于启用“ IP标识”以检查登录用户的IP是否与MySQL数据库中存储的IP相匹配。我还希望人们能够添加多个IP地址。我目前正在使用一个简单的PHP数组,例如:
$IP_array = array("xxx.xxx.xxx.xx1", "xxx.xxx.xxx.xx2", "xxx.xxx.xxx.xx3");
因此,它可以检查Array值之一是否与数据库中给定的IP地址之一匹配。问题是;它不是最有效的选择,也不支持CRUD。我还尝试将每个IP都分配给它自己的列,但这意味着我必须为每个IP地址创建一个新列,但是它应该是无限制的,因此这就是为什么我希望将其放在一个列中。
我该如何编码一种更有效的方式来将多个值存储在仅一列(如数组)中,该列还支持:添加值和删除值?
答案 0 :(得分:2)
仅需扩展我上面的评论,现在您就可以看到以下内容:
╔══════════╗
║ User ║
╠══════════╣
║ ID ║
╠══════════╣
║ Name ║
╠══════════╣
║ Address ║
╚══════════╝
哪个地址可以正常工作?但是您想添加更多。您可以这样做:
╔══════════╗
║ User ║
╠══════════╣
║ ID ║
╠══════════╣
║ Name ║
╠══════════╣
║ Address1 ║
╠══════════╣
║ Address2 ║
╚══════════╝
但是正如您正确指出的那样,您将“必须为每个IP地址创建一个新列。”
相反,您应该创建一个新表,这样就可以了:
╔══════════╗ ╔═══════════╗
║ User ║ ║ Addresses ║
╠══════════╣ ╠═══════════╣
║ ID ║ ║ UserID ║
╠══════════╣ ╠═══════════╣
║ Name ║ ║ Address ║
╚══════════╝ ╚═══════════╝
用户的ID指示两者之间的关系,应在地址表上将其指定为外键。查询时,您将执行以下操作:
SELECT Name, Address FROM User U LEFT JOIN Addresses A ON (U.ID = A.UserID) WHERE ID = ?
您将为每个地址得到一行。