2016-06-08 52 views
0

我想更新一個MySQL數據庫與我抓取的數據。 (順便說一句,我需要爲特定的單個項目做到這一點,但這不是問題。)當涉及到創建單獨的語句來獲取或更新我可以做到這一點。另外,我可以這樣來獲取數據:php mysqli更新與提取

$query = "SELECT starting_amount FROM comp ORDER BY item DESC LIMIT 3, 1"; 

$result = $conn->query($query); 

$row = mysqli_fetch_assoc($result); 

,我能這樣來更新數據:

$sql = "UPDATE comp SET final_amount=25 WHERE item='Y'"; 

,但我不能把這兩者結合起來(我試過幾個方式和失敗)。換句話說,我可以使用手動輸入的數據更新表格記錄,例如我在update語句中手動鍵入「25」,在這個例子中是來自'staring_amount'的數據,但我不知道如何用一個會自動使用我從表中獲取的數據的語句進行更新。換句話說,我該如何編寫update語句,以便「SET final_amount =」後面跟着抓取的數據?預先感謝任何幫助!

回答

0

所以,你只需要你提取的數據傳遞給查詢

$starting_amount = $row['starting_amount']; 
$sql = "UPDATE comp SET final_amount=$starting_amount WHERE item='Y'"; 
+0

非常感謝BizzyBob!有用。 :D –

0

首先,我強烈建議尋找到準備好的發言 - 使用準備好的語句插入數據的一種簡單的方法來防止SQL注入攻擊也會讓你想做的事情變得更容易。

下面是使用基於你的榜樣的mysqli準備好的UPDATE語句的例子:

$statement = $conn->prepare("UPDATE comp SET final_amount=? WHERE item='Y'") 
$statement->bind_param(25); 

我會承擔這個答案要只使用結果集的第一行。

使用上面的示例,可以將bind_param中的值替換爲行中的值。

$statement->bind_param($row['starting_amount']); 
+0

謝謝Eric!當我學習東西時,我會研究準備好的陳述...感謝您的提示! –

0

由於您可以在UPDATE中加入查詢,因此無需將它們作爲單獨的語句來執行。

UPDATE comp AS c1 
JOIN (SELECT starting_amount 
     FROM comp 
     ORDER BY item DESC 
     LIMIT 3, 1) AS c2 
SET c1.final_amount = c2.starting_amount 
WHERE c1.item = 'Y' 
+0

謝謝巴爾瑪。我仍然在學習基本步驟,所以此時我對C1和C2是什麼感到困惑。但希望當我學習我會更多的東西出來! :) –

+0

他們是表別名。它們允許您使用短名稱來引用更長的表名,並且在需要引用子查詢時需要它們,因爲它不是命名錶。 – Barmar

+0

當查詢中有多個同一表的多個實例時,也需要它們,以便區分它們。 – Barmar