Php 首选项列表位于单个MySQL列中

Php 首选项列表位于单个MySQL列中,php,mysql,Php,Mysql,我目前正在为用户登录脚本编写代码。该脚本还有一个选项,可以启用“IP标识”来检查登录者的IP是否与MySQL数据库中存储的IP匹配。我还希望人们能够添加多个IP地址。我目前正在使用一个简单的PHP数组,如下所示: ╔══════════╗ ║ User ║ ╠══════════╣ ║ ID ║ ╠══════════╣ ║ Name ║ ╠══════════╣ ║ Address ║ ╚══════════╝ SELECT Name, Address FROM

我目前正在为用户登录脚本编写代码。该脚本还有一个选项,可以启用“IP标识”来检查登录者的IP是否与MySQL数据库中存储的IP匹配。我还希望人们能够添加多个IP地址。我目前正在使用一个简单的PHP数组,如下所示:

╔══════════╗
║   User   ║
╠══════════╣
║ ID       ║
╠══════════╣
║ Name     ║
╠══════════╣
║ Address  ║
╚══════════╝
SELECT Name, Address FROM User U LEFT JOIN Addresses A ON (U.ID = A.UserID) WHERE ID = ?
$IP_array=array(“xxx.xxx.xxx.xx1”、“xxx.xxx.xxx.xx2”、“xxx.xxx.xxx.xx3”)

因此,它可以检查其中一个数组值是否与数据库中给定的IP地址之一匹配。问题是;它不是最有效的选项,也不支持CRUD。我也试着给每个IP它自己的列,但这意味着我必须为每个IP地址创建一个新列,但它应该是无限的,所以我希望它在一个列中


如何编写一种更有效的方法,只在一列(如数组)中存储多个值,该方法还支持:添加值和删除值?

只需扩展我上面的评论,现在您有如下内容:

╔══════════╗
║   User   ║
╠══════════╣
║ ID       ║
╠══════════╣
║ Name     ║
╠══════════╣
║ Address  ║
╚══════════╝
SELECT Name, Address FROM User U LEFT JOIN Addresses A ON (U.ID = A.UserID) WHERE ID = ?
这对于一个地址来说很好。但你想添加更多。您可以这样做:

╔══════════╗
║   User   ║
╠══════════╣
║ ID       ║
╠══════════╣
║ Name     ║
╠══════════╣
║ Address1 ║
╠══════════╣
║ Address2 ║
╚══════════╝
但正如您正确指出的,您将“必须为每个IP地址创建一个新列。”

相反,您应该创建一个新表,这样您就可以:

╔══════════╗        ╔═══════════╗                  
║   User   ║        ║ Addresses ║                  
╠══════════╣        ╠═══════════╣                  
║ ID       ║        ║ UserID    ║                  
╠══════════╣        ╠═══════════╣                  
║ Name     ║        ║ Address   ║                  
╚══════════╝        ╚═══════════╝                  
用户ID表示两者之间的关系,应在地址表中指定为外键。查询时,您可以执行以下操作:

╔══════════╗
║   User   ║
╠══════════╣
║ ID       ║
╠══════════╣
║ Name     ║
╠══════════╣
║ Address  ║
╚══════════╝
SELECT Name, Address FROM User U LEFT JOIN Addresses A ON (U.ID = A.UserID) WHERE ID = ?

每个地址都有一行。

主题太宽泛,但你想保留你的数据。添加另一个具有用户ID和IP地址列的表。使用联接来检索匹配的列。@miken32是的,但这意味着IP用户可以存储的数量(列的数量)是有限制的。这就是问题所在,它必须是无限的。不,您的表有两列。用户ID和IP地址。每个IP地址有一个条目。阅读我链接到的文章。@miken32我明白了!我试试看。谢谢你的帮助!但是“Address”列的值是什么样的呢?因为这对于用户如何添加/删除地址(在我的例子中是IP地址)很重要。它看起来就像你放进去的任何东西。将它们添加为普通字符串,或者在PHP(ip2long)或MySQL(INET_ATON)端转换为数字。对!但例如,;如果一个用户有两个IP地址:“123”和“987”,我该怎么做?我应该把:
123987
放在一列中吗?因为这很难删除(如果您需要选择要删除的特定IP地址),所以您无法获得此信息。地址表中的每一个地址对应一行。现在我知道了!因此,如果用户想要添加一个新的IP地址,PHP脚本应该通过一个查询添加一个新行,该查询使用UserID作为指向IP地址“所有者”的链接,如果您想要删除它,那么应该以该IP地址为目标&UserID?