2017-08-21 178 views
0

所以我想要的是能夠添加不同的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!"; 
} 

我想有不同的IP在那樣的LONGTEXT列:32.12.53.12|42.12.41.2|42.1.6.3.7。問題是,當我這樣做時,它只會增加第一個讓我們說32.12的IP,並且不加| |。任何幫助?

+0

你應該看看正常化擺在首位的數據庫;單個單元格中的字符分隔值是對RDBMS的可怕濫用。 – deceze

回答

0

你的表結構
就像是在評論中提到的,在那樣的數據庫具有(在你的情況下,隔膜是|)字符分隔值,是一個壞主意。你應該規範你的數據庫 - 有更多的行而不是這樣做。與它合作會更容易!

爲什麼這是行不通的,因爲它是
MySQL不能與+加在一起字符串(如你在JavaScript這樣做)。這就是告訴MySQL你想要做數學(增加整數,例如1+1)。這意味着你正悄無聲息地轉換爲整數,這就是爲什麼你只能看到IP的第一部分(在.期間之前的第一部分是一個整數,其餘部分被轉化)。

解決方案
可以使用CONCAT()函數來實現你想要的 - 雖然像上面提到的,我強烈反對這種結構,這將增加的最後一個IP有隔離|

隨着還有一個有界的佔位符(如你綁定ID)添加新的IP,新的代碼將看起來像這樣。您應該每綁定進入查詢的變量,否則它是沒有意義的。

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(); 
} 
相關問題