Php 是否基于重复条目插入/更新
我有一个带有编辑/保存按钮的表,该按钮从表视图中提取信息。单击“编辑”后,可以编辑“组ID”列。点击save后,我希望它运行一个插入查询,将SKU和Group_ID插入数据库中的表(而不是视图)。但是,如果该表中已经存在SKU,我希望它运行更新查询 我怎样才能成功地做到这一点?据我所知,我目前正在使用AJAX并正确地引入这些值,但我认为我的查询可能有问题。谢谢 单击按钮时通过AJAX调用的update-index.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
<?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
这有效!太棒了,谢谢!另外,如何在查询的更新部分有效地使用?
作为占位符?