2016-09-19 68 views
0

當我將使用此代碼它插入兩個DATAS和我downt知道如何解決它當我將數據插入到MySQL它插入兩個上傳數據,我不知道爲什麼

$sql = "SELECT Version_id FROM versions ORDER BY Version_id DESC LIMIT 1;"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     $lastVersion =$row["Version_id"]; 
    } 
} 
echo($lastVersion); 
$lastVersion++; 
$sql = "INSERT INTO versions (version) 
VALUES ('v$lastVersion')"; 
if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
+0

你的意思是2行?另外,我認爲你需要將'Version_id'的值添加到新添加的行中。 – jeroen

+0

是v $ lastVersion還是$ lastVersion –

+0

指定了一些你正在使用的東西。你的'SELECT'和'INSERT'命令不匹配。 – RST

回答

1

雖然我不完全瞭解你對「兩個數據」的含義,我發現你的代碼有多個問題。

首先它是非常低效的,並傾向於race conditions。這也是非常錯誤的,因爲它沒有做到你想要的。更不用說應該用本地數據庫功能替代。

其中大部分可以通過將version_id字段更改爲AUTO_INCREMENT來修復。這將自動爲新記錄提供集合中的下一個可用ID,與您正在嘗試的操作完全相同。然後,你可以通過使用「lastInsertId()

這會讓所有在您的文章superflous代碼檢索此ID,並且只需要你做這樣的事情,當實際插入的數據:

$sql = "INSERT INTO `version`(`setting`, `date`) VALUES (:setting, :date)"; 
$stmt = $db->prepare ($sql); 
$res = $stmt->execute ($data); 
$newID = $db->lastInsertId(); 

後這個新版本ID存儲在$newID變量中。

當然,如果您想要UPDATE版本ID出於某種原因,那麼INSERT是錯誤的命令使用。另外,爲什麼使用整個表格來表示基本上簡單的版本號?總之,你的整個桌子對我來說並沒有什麼意義。
我建議解釋它背後的基本原理,以便我們可以想出一些更好的解決方案。

相關問題