php - 单个 MySQL 列中的首选项列表
问题描述
我目前正在为用户登录脚本编写代码。该脚本还具有启用“IP 识别”的选项,以检查登录者的 IP 是否与存储在 MySQL 数据库中的 IP 匹配。我还希望人们能够添加多个 IP 地址。我目前正在使用一个简单的 PHP 数组,如下所示:
$IP_array = array("xxx.xxx.xxx.xx1", "xxx.xxx.xxx.xx2", "xxx.xxx.xxx.xx3");
因此它可以检查其中一个数组值是否与数据库中的给定 IP 地址之一匹配。问题是;它不是最有效的选择,也不支持 CRUD。我还尝试为每个 IP 提供它自己的列,但这意味着我必须为每个 IP 地址创建一个新列,但它应该是无限的,所以这就是我希望它位于单个列中的原因。
如何编写一种更有效的方法来将多个值存储在仅一列(如数组)中,它还支持:添加值和删除值?
解决方案
只是为了扩展我上面的评论,现在你有这样的东西:
╔══════════╗
║ User ║
╠══════════╣
║ ID ║
╠══════════╣
║ Name ║
╠══════════╣
║ Address ║
╚══════════╝
这适用于单个地址。但是你想添加更多。你可以这样做:
╔══════════╗
║ User ║
╠══════════╣
║ ID ║
╠══════════╣
║ Name ║
╠══════════╣
║ Address1 ║
╠══════════╣
║ Address2 ║
╚══════════╝
但正如您正确指出的那样,您将“必须为每个 IP 地址创建一个新列”。
相反,你应该创建一个新表,所以你有这个:
╔══════════╗ ╔═══════════╗
║ User ║ ║ Addresses ║
╠══════════╣ ╠═══════════╣
║ ID ║ ║ UserID ║
╠══════════╣ ╠═══════════╣
║ Name ║ ║ Address ║
╚══════════╝ ╚═══════════╝
用户的ID表示两者之间的关系,应该指定为Address表上的外键。查询时,您会执行以下操作:
SELECT Name, Address FROM User U LEFT JOIN Addresses A ON (U.ID = A.UserID) WHERE ID = ?
每个地址都会有一行。
推荐阅读
- powershell - 在脚本中检测是否通过普通 PowerShell 窗口或 Exchange 命令行管理程序运行
- amazon-web-services - 将文件挂载到 AWS 弹性文件系统使用什么 aws 服务并通过权限
- php - Symfony 序列化器:将 Json 反序列化为实体
- java - @Test 在类级别时方法的执行顺序
- php - 如何下载谷歌搜索结果页面的源代码
- mysql - MySQL 简单存储过程调用另一个简单存储过程并且永无止境
- java - Video Player App,最后播放下一个视频
- javascript - 如何从 ajv 输出中获取属性名称以将验证错误映射到人类友好的消息?
- pagination - 使用servlet、jsp和jstl在java中分页有困难
- python - 熊猫中的 if 和函数