php - PHP MySQL Insert INTO...ON Duplicate Key Update Where
问题描述
我需要在票表中不存在行时插入和/或在行存在时通过 1 个查询进行更新。
我尝试了以下方法,它没有添加新记录,也没有增加现有记录。
$query_upsert = mysqli_query($mysqli,
"INSERT INTO tickets (
ticket_companyname,
ticket_ordernumber,
ticket_datetimedeliverydate,
ticket_ritech,
ticket_ticketstatus
)
SELECT
nextgenorder_companyname,
nextgenorder_ordernumber,
nextgenorder_deliverydate,
'$ticket_ritech',
'$ticket_ticketstatus'
FROM nextgenorders2
WHERE
nextgenorder_companyname LIKE CONCAT(SUBSTRING_INDEX('$nextgenorder_companyname', ' ', 1),'%')
AND nextgenorder_deliverydate='$nextgenorder_deliverydate'
ON DUPLICATE KEY UPDATE,
ticket_companyname='$ticket_companyname',
ticket_ordernumber='$ticket_ordernumber',
ticket_datetimedeliverydate='$ticket_datetimedeliverydate',
ticket_ritech='$ticket_ritech',
ticket_ticketstatus='$ticket_ticketstatus'
WHERE
ticket_companyname LIKE CONCAT(SUBSTRING_INDEX('$nextgenorder_companyname', ' ', 1),'%')
AND ticket_datetimedeliverydate='$nextgenorder_deliverydate'
)"
);
你可以在 upsert 查询中使用 WHERE 子句吗?我有所有错误,我没有收到任何错误。
请帮忙。
谢谢,
解决方案
您的查询存在的问题和可能的改进:
它有两个
WHERE
子句:你只想要一个,它应该出现在SELECT
子句之后您对 SQL 注入持开放态度,您应该使用绑定参数
您不需要在赋值右侧重复参数:相反,您可以使用
VALUES
语法另外我认为您正在尝试更新子句中的太多字段
ON DUPLICATE KEY
,我删除了其中一些并让那些我认为相关的字段(本质上,您不需要更新起作用的列来检查冲突)
考虑:
INSERT INTO tickets (
ticket_companyname,
ticket_ordernumber,
ticket_datetimedeliverydate,
ticket_ritech,
ticket_ticketstatus
)
SELECT
nextgenorder_companyname,
nextgenorder_ordernumber,
nextgenorder_deliverydate,
?, --> query parameter for "ticket_ritech"
?, --> ... "ticket_ticketstatus"
FROM nextgenorders2
WHERE
nextgenorder_companyname
LIKE CONCAT(SUBSTRING_INDEX(?, ' ', 1),'%') --> ... "nextgenorder_companyname"
AND nextgenorder_deliverydate = ? --> ... "nextgenorder_deliverydate"
ON DUPLICATE KEY UPDATE,
ticket_ritech = VALUES(ticket_ritech)
ticket_ticketstatus = VALUES(ticket_ticketstatus)
推荐阅读
- python - 如何在非索引列上找到多个熊猫数据框的交集
- c - C: printf 在 while 循环之前仍然没有刷新,即使格式字符串中有换行符
- c++ - 在 Visual C++ 2017 中:属性页中的哪个位置说明了哪些应用程序类型对应于项目?
- webpack - @font-face 不上传本地字体并且不显示错误(webpack)
- java - 每当我尝试获取表上的值并在`setString`上使用它时,我都会收到 indexOutOfBoundsException
- reactjs - 如何通过单击查看按钮显示保存的数据
- algorithm - TEA 算法中操作数的值在 Assembly 中无法正确解密
- javascript - 如何用n个切片画一个圆
- algorithm - 给定整数 n 的 n*(n+1),有效地找到 n
- python - SQLAlchemy ORM / Python:仅当搜索值不是None时才包含查询过滤器的单行器(内联'if')