【问题标题】:Insert/Update Based on Duplicate Entry or Not是否基于重复条目插入/更新
【发布时间】:2017-02-23 21:00:54
【问题描述】:

我有一个带有编辑/保存按钮的表格,可以从表格视图中提取信息。点击编辑后,您可以编辑 Group_ID 列。一旦你点击保存,我希望它运行一个插入查询,将 SKU 和 Group_ID 插入到我数据库中的表(而不是视图)中。但是,如果 SKU 已存在于该表中,我希望它改为运行更新查询。

我怎样才能成功地做到这一点?我目前正在使用 AJAX,并且据我所知正在正确输入这些值,但我认为我的查询可能存在问题。谢谢!

点击按钮时通过 AJAX 调用的 update-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);


?>

【问题讨论】:

  • UPDATE SKU_Group_Index SET SKU = $SKU, Group_ID = $Group_ID WHERE SKU = $SKU

标签: php sql-server ajax insert sql-update


【解决方案1】:

您没有向$stmt-&gt;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]);

【讨论】:

  • 这成功了!很好,谢谢!另外,如何在查询的更新部分有效地使用? 作为占位符?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
相关资源
最近更新 更多