2017-02-23 42 views
1

我有一個表格,其中包含一個從表格視圖中獲取信息的編輯/保存按鈕。一旦您點擊編輯,您可以編輯Group_ID列。一旦你點擊保存,我希望它運行插入查詢,將SKU和Group_ID插入到我的數據庫中的表(而不是視圖)。但是,如果SKU已經存在於該表中,我希望它運行更新查詢。插入/更新是否基於重複輸入

我怎麼能成功地做到這一點?我目前正在使用AJAX,並且正確地將值帶入正確的位置,但我認爲我的查詢可能存在問題。謝謝!

是通過AJAX呼籲按鈕點擊更新的index.php腳本:

<?php 

    $Group_ID = $_POST['Group_ID']; 
    $SKU = $_POST['SKU']; 

    $host="xxxxxxxx"; 
    $dbName="xxxx"; 
    $dbUser="xxxxxxxxxxxx"; 
    $dbPass="xxxxxxxxxx"; 

    $pdo = new PDO("sqlsrv:server=".$host.";Database=".$dbName, $dbUser, $dbPass); 

    $sql = "IF EXISTS (SELECT SKU FROM SKU_Group_Index WHERE SKU = '$SKU') 
      UPDATE SKU = $SKU, Group_ID = $Group_ID 
      ELSE 
      INSERT INTO SKU_Group_Index (SKU, Group_ID) VALUES (?, ?)"; 

    $stmt = $pdo->prepare($sql); 
    $result = $stmt->execute(); 
    echo json_encode($result); 


?> 
+0

'UPDATE SKU_Group_Index SET SKU = $ SKU,GROUP_ID = $ GROUP_ID WHERE SKU = $ SKU' – Sami

回答

3

您沒有傳遞任何值$stmt->execute(),但忘了你的UPDATE語句中的表名。試試這個:

$sql = "IF EXISTS (SELECT SKU FROM SKU_Group_Index WHERE SKU = '$SKU') 
      UPDATE SKU_Group_Index SET SKU = '$SKU', Group_ID = '$Group_ID' 
      ELSE 
      INSERT INTO SKU_Group_Index (SKU, Group_ID) VALUES (?, ?)";  
    $stmt = $pdo->prepare($sql); 
    $result = $stmt->execute([$SKU, $Group_ID]); 

而且,你必須佔位符代替查詢與其它PHP變量以及。將未轉義的用戶數據傳遞到數據庫非常危險。嘗試是這樣的:

$sql = "IF EXISTS (SELECT SKU FROM SKU_Group_Index WHERE SKU = ?) 
      UPDATE SKU_Group_Index SET SKU = ?, Group_ID = ? 
      ELSE 
      INSERT INTO SKU_Group_Index (SKU, Group_ID) VALUES (?, ?)";  
    $stmt = $pdo->prepare($sql); 
    $result = $stmt->execute([$SKU, $SKU, $Group_ID, $SKU, $Group_ID]); 
+0

這個工作!太好了,謝謝!另外,如何在查詢的更新部分中有效地使用'?'作爲佔位符? – Rataiczak24

+0

看到我上面的更新。 – miken32

+1

很好用......謝謝! – Rataiczak24