我无法将IP添加到我的数据库中。为什么呢?

时间:2017-08-21 10:13:50

标签: php mysql database mysqli ip

所以我想要的是能够为我的数据库添加不同的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。问题是当我这样做时它只添加第一个让我们说的32.12的IP而没有|。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

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

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

<强>解决方案
您可以使用CONCAT()函数来实现您想要的功能 - 尽管如上所述, 我强烈反对此结构 ,这将添加最后一个IP分隔符|

通过使用有界占位符添加新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();
}