【问题标题】:Laravel Query behave differently on IPv4 Vs. IPv6 EnvironmentLaravel Query 在 IPv4 Vs 上的行为不同。 IPv6 环境
【发布时间】:2018-03-22 07:48:18
【问题描述】:

我在这里遇到了一个奇怪的情况,这是我在使用 Laravel 时从未见过的。 我在不同的设置上有相同的代码库,1 个在 IPv4 虚拟机中,1 个在 IPv6 虚拟机中。

这是数据库中的数据。

这是我通常的查询方式。

// $ap = '102030405067';
$gw = Gateway::where('cpe_mac','=',$ap)->first();
dd($gw);

在我的 IPv4 设置中,我得到了:

{#541 ▼
  +"id": 1
  +"account_id": "50"
  +"cpe_mac": "102030405067"
  +"gw_id": "1956692524588882"
  +"gw_secret": "zUIyaQfCntob2thL6uR4uQfBvmlCei-5q_oVSJnyeSc"
  +"fb_wifi_enable": "1"
  +"created_at": "2017-10-10 14:41:17"
  +"updated_at": "2017-10-10 14:41:17"
}

在我的 IPv6 设置中,我得到了:

null


尝试#2

dd(Gateway::all());

结果

在 IPv4 中,我得到了返回的所有记录。

在 IPv6 中,我得到了这个空集合

Collection {#542 \u25bc #items: [] }


最令人困惑的部分是,其他表似乎工作正常,这个gateways 似乎是唯一导致问题的表。

我检查了我的网关型号名称和表名称。他们拼写正确。


  • 你们以前见过这样的事情吗?

  • 如何进一步调试这个问题?

  • 我还应该尝试什么?

【问题讨论】:

    标签: php laravel laravel-5 ip laravel-5.1


    【解决方案1】:

    说实话 - 我认为这是不可能的。

    确保在这两种情况下$ap 包含完全相同的值。您可以使用 trim($ap) 以防万一,以确保它不包含额外的特殊字符。

    还要确保在两个 VM 上您的数据库中有相同的数据。现在看来,在一个虚拟机中,您的数据库中有数据,而在第二个虚拟机中却没有。

    编辑

    在 Laravel 中不可能有直接的问题,所以:

    • 确保在两个 VM 中您的数据库中都有数据 - 在两个 VM 上运行 SELECT * FROM gateways 以验证您是否有任何记录(您没有提到两个 VM 使用相同的数据库,所以我假设它们是不同的)
    • 确保在两个 VM 中,您的 .env 文件中设置了有效的数据库
    • 在两个 VMS 上运行 php artisan config:clear 只是为了确保您没有缓存无效的数据库连接

    【讨论】:

    • 让我试试这个trim($ap)
    • 我试过dd(Gateway::all());。在 IPv4 中,我得到了所有记录的返回。在 IPv6 中,我得到了这个空集合 Collection {#542 \u25bc #items: [] }
    • 那么您确定在两台服务器上都有gateways 表中的数据吗?如果您不这样做,这很明显将找不到任何记录。确保在两台服务器上都有此表中的值
    • 是的。我确定。两个虚拟机都指向相同的数据库进行测试。
    • 因此,当您连接到一个数据库并运行SELECT * FROM gateways where cpe_mac = '102030405067' 时,您会得到一条记录,而在第二个完全相同的查询中,您会得到相同的记录吗? cpe_mac 包含什么 - 它不是 MAC 地址还是类似的东西,并且对于两个 VM 都不同?
    【解决方案2】:

    什么是 IP 地址? IPv6、IPv4协议是什么,它们有什么区别?

    什么是 IP 地址?

    IP(互联网协议)是将数据从一台计算机发送到互联网上另一台设备的协议。互联网上的每台计算机都有不同的 IP 地址,可以与互联网上的所有其他计算机进行识别。 IP 地址是网络上计算机或设备的数字地址和标识符。每个设备都有一个用于通信目的的 IP 地址。

    互联网协议版本 4 (IPv4)

    Internet 协议版本 4 (IPv4) 是 Internet 协议 (IP) 的第四个版本。该协议目前最常用于不同类型网络上的数据通信,因为它支持所有设备。IPv4 发明于 1970 年。

    互联网协议版本 6 (IPv6)

    Internet 协议版本 6 (IPv6) 它是 Internet 的最新更新版本协议。这为计算机提供了一个识别和定位系统,并通过互联网路由流量。 IPv6 发明于 1998 年。

    IPv4 与 IPv6 之间的差异

    IPv4

    1.IPv4 是一个 32 位地址。 2.IPv4为编号地址方式。

    IPv6

    1.IPv6 是 128 位地址。 2.IPv6是字母数字地址方式。

    更多信息click在这里

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多