Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否基于重复条目插入/更新_Php_Sql Server_Ajax_Insert_Sql Update - Fatal编程技术网

Php 是否基于重复条目插入/更新

Php 是否基于重复条目插入/更新,php,sql-server,ajax,insert,sql-update,Php,Sql Server,Ajax,Insert,Sql Update,我有一个带有编辑/保存按钮的表,该按钮从表视图中提取信息。单击“编辑”后,可以编辑“组ID”列。点击save后,我希望它运行一个插入查询,将SKU和Group_ID插入数据库中的表(而不是视图)。但是,如果该表中已经存在SKU,我希望它运行更新查询 我怎样才能成功地做到这一点?据我所知,我目前正在使用AJAX并正确地引入这些值,但我认为我的查询可能有问题。谢谢 单击按钮时通过AJAX调用的update-index.php脚本: <?php $Group_ID = $_POST['Gr

我有一个带有编辑/保存按钮的表,该按钮从表视图中提取信息。单击“编辑”后,可以编辑“组ID”列。点击save后,我希望它运行一个插入查询,将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);


?>

您没有将任何值传递给
$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]);

更新SKU\u Group\u索引集SKU=$SKU,Group\u ID=$Group\u ID,其中SKU=$SKU
这有效!太棒了,谢谢!另外,如何在查询的更新部分有效地使用
作为占位符?