PHP MySQL Insert INTO...ON Duplicate Key Update Where
PHP MySQL Insert INTO...ON Duplicate Key Update Where
当工单中不存在行时我需要插入 table and/or 当行确实存在时更新 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)
当工单中不存在行时我需要插入 table and/or 当行确实存在时更新 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)