【问题标题】:I can't add IPs to my database. Why?我无法将 IP 添加到我的数据库。为什么?
【发布时间】:2018-01-29 09:03:02
【问题描述】:

所以我想要的是能够向我的数据库添加不同的 IP。我要做的是:

if ($stmt = $conn->prepare("UPDATE csgo_servers SET ips = ips + '$anip' + '|' WHERE id = ?")) {
    $stmt->bind_param("s", $id);
    $stmt->execute();
    $stmt->close();
    echo "IP Added!";
}

我想在这样的 Longtext 列中有不同的 IP:32.12.53.12|42.12.41.2|42.1.6.3.7。问题是当我这样做时,它只添加了第一个让我们说 IP 的 32.12 并且没有 |。有什么帮助吗?

【问题讨论】:

  • 您应该首先考虑规范化您的数据库;单个单元格中的字符分隔值是对 RDBMS 的严重滥用。

标签: php mysql database mysqli ip


【解决方案1】:

桌子的结构
就像在 cmets 中提到的那样,在这样的数据库中使用字符分隔值(在您的情况下,分隔符是 |)是一个坏主意。您应该规范化您的数据库 - 拥有更多行而不是这样做。使用起来会更容易!

为什么这不起作用
MySQL 不能将字符串与+ 一起添加(就像您在 JavaScript 中所做的那样)。这告诉 MySQL 你想要做数学(添加整数,例如1+1)。这意味着您正在默默地转换为整数,这就是为什么您只看到 IP 的第一部分(句点 . 之前的第一部分是一个整数,其余部分是旋转的)。

解决方案
您可以使用CONCAT() 函数来实现您想要的 - 虽然就像上面提到的,我强烈建议不要使用这种结构,这将添加带有分隔符 @ 的最后一个 IP 987654327@.

同时添加带有有界占位符的新 IP(例如绑定 ID),新代码将如下所示。您应该始终将 每个 变量绑定到查询中,否则它有点毫无意义。

if ($stmt = $conn->prepare("UPDATE csgo_servers SET ips = CONCAT(ips, '|', ?) WHERE id = ?")) {
    $stmt->bind_param("ss", $anip, $id);
    if ($stmt->execute())
        echo "IP Added!";
    $stmt->close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2019-10-23
    相关资源
    最近更新 更多