所以我想要的是能够为我的数据库添加不同的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而没有|。有什么帮助吗?
答案 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();
}