PHP MySQL Insert INTO...ON Duplicate

我需要在票表中不存在行时插入和/或在行存在时通过 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 子句吗?我有所有错误,我没有收到任何错误。


请帮忙。


红糖糍粑
浏览 83回答 1
1回答

噜噜哒

您的查询存在的问题和可能的改进:它有两个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)
打开App,查看更多内容
随时随地看视频慕课网APP