为了账号安全,请及时绑定邮箱和手机立即绑定

PHP MySQL Insert INTO...ON Duplicate

PHP MySQL Insert INTO...ON Duplicate

PHP
红糖糍粑 2022-10-28 09:41:03
我需要在票表中不存在行时插入和/或在行存在时通过 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 子句吗?我有所有错误,我没有收到任何错误。请帮忙。
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

您的查询存在的问题和可能的改进:

  • 它有两个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)


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号