【问题标题】:Auto-creating tables or rows with populated data in mySQL在 mySQL 中使用填充数据自动创建表或行
【发布时间】:2011-10-10 12:31:15
【问题描述】:

我正在寻找使用带有 PHP 和 MySQL 的 Web 前端创建一个基本的 IP 管理解决方案。我对 PHP 或 MySQL 不太熟悉,但我想知道是否可以执行以下操作:

当用户使用 HTML 表单将新的子网范围插入数据库(例如 192.168.1.0/24)时,是否有可能触发另一个创建表(例如 ip_addresses),该表将自动填充表子网范围(例如 192.168.1.1、1.2、1.3 等)。

抱歉,如果我太含糊了 - 谢谢

【问题讨论】:

    标签: php mysql create-table


    【解决方案1】:

    虽然可以按照您的要求进行操作,但我建议您不要这样做。在 MySQL 中,通常将 IP 地址存储为长整数,而不是将其字符串表示为点分四边形。 MySQL 提供了两个函数INET_ATON() 和对应的INET_NTOA() 将IP 地址转换为长整数。

    我推荐的结构是存储子网的开始和结束整数表示。这样,如有必要,就可以查询位于端点之间的地址。它还允许您存储不完整的子网。

    来自 MySQL 文档:

    mysql> SELECT INET_ATON('10.0.5.9');
            -> 167773449
    mysql> SELECT INET_NTOA(167773449);
            -> '10.0.5.9'
    

    您可以使用以下语句进行查询:

    SELECT * ipRanges WHERE INET_ATON('192.168.1.99') BETWEEN startIpNum AND endIpNum;
    

    【讨论】:

    • 谢谢迈克尔 - 将进一步调查。
    【解决方案2】:

    您可以使用触发器来做到这一点。

    CREATE
        TRIGGER new_range INSERT
        ON ip_range FOR EACH ROW BEGIN ... END
    

    并将管理特定 IP 地址的逻辑放在 BEGIN ... END 范围内,而不是“...”

    在这里查看:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html - 了解其工作原理的详细信息。

    【讨论】:

    • 感谢 Aleks G,我会看看那个文档!
    猜你喜欢
    • 2011-06-13
    • 2019-07-01
    • 1970-01-01
    • 2014-09-22
    • 2012-08-03
    • 2016-01-08
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多