【问题标题】:MYSQL INET_ATON. Did I find a bug or is this known? [closed]MYSQL INET_ATON。我是否发现了一个错误或者这是已知的? [关闭]
【发布时间】:2023-03-07 14:11:01
【问题描述】:

这是一个已知问题吗?

select * from 'tablename' where INET_ATON('any valid ip');

显示整个数据库。我不小心忘记添加 ipaddress = INET_ATON('ip'); 并 cganged 整个数据库。

【问题讨论】:

  • 你之后用不同的查询“改变了整个数据库”,对吧?或者好像这是最终选择所有内容的子查询的一部分?
  • WHERE INET_ATON('any valid ip')。 MySQL 将尝试将其转换为布尔值。因为它大于0,就像你做了WHERE TRUE 或(WHERE 1)。这就是它选择所有行的原因。仅此查询不会更新任何内容。您是否运行了UPDATE 查询?
  • update 'tablename' set field1 = '0', field2 = '0', field3 = '0' where INET_ATON('any ip');
  • @user2561395:是的。你去吧。 where INET_ATON('any ip') 选择了所有行,因为它已转换为布尔值,因此 TRUE :-)
  • 可能需要注意,ip 必须有效,否则INET_ATON(); 将返回 null,在这种情况下不会选择任何内容。

标签: mysql inet-aton


【解决方案1】:

我没有看到返回的所有行有任何问题。如果 IP 有效,INET_ATON 将返回数字 > 0,如果 IP 无效,则返回 NULL。这意味着,这就像发出查询

SELECT * FROM `tablename` WHERE 1

(或任何其他正数)将返回所有行。

【讨论】:

    【解决方案2】:

    你查询的内容基本上相当于:

    select * from 'tablename' 
    where 1
    

    WHERE 子句始终为真,因此返回所有表行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多