I'm attempting to create an UPSERT statement using MySQL/MariaDB. The Procedure is being called from a PHP file, which works fine for INSERTs. However, for UPDATEs, INSERTs are always being done.
PHP is receiving the ID of the target, like so c075860fd58b11e6b0a03d5c165b858c (32 chars and Existing Record).
The funny thing is that I've tried running the Procedure on 4 different Servers:
- My Personal Development Server has Windows Server 2016 installed with Apache, PHP and MySQL manually installed.
 - My Personal Laptop has WAMP installed on Windows 10 Pro.
 - The Workstation in use at my Academic Institution has XAMP installed on Windows 7 Pro.
 - The Production Environment has Apache, PHP and MySQL installed on Ubuntu Server 16.04.1.
 
The following procedure works on my Personal Server, but fails to do so on the rest of the devices. All of which have MySQL 5.7 installed. For the sake of eliminating possible user rights issues, I've executed the following Procedure using the root user on 3 of the 4 devices (Personal Server, Personal Laptop, Production Environment).
Could there possibly be something I'm missing out on?
I've also attempted to run the Procedure directly from phpmyadmin, where no new records are inserted and none updated. This procedure works well on my Personal Server when executed from the IDE (DataGrip).
CREATE PROCEDURE    usp_upsertProperty
                    (
                        IN var_location         VARCHAR(50)
                        , IN var_price          DECIMAL(20, 2)
                        , IN var_type           VARCHAR(50)
                        , IN var_description    TEXT
                        , IN var_id             VARCHAR(32)
                    )
BEGIN
    DECLARE         var_locationID SMALLINT;
    DECLARE         var_typeID TINYINT;
    IF (LENGTH(var_id) != 32) THEN
        SET var_id =
        (
            SELECT REPLACE(UUID(), '-', '')
        );
    END IF;
    SET var_locationID =
    (
        SELECT      L.location_id
        FROM        tbl_locations AS L
        WHERE       L.name = var_location
    );
    SET var_typeID =
    (
        SELECT      T.type_id
        FROM        tbl_propertyTypes AS T
        WHERE       T.name = var_type
    );
    INSERT INTO     tbl_properties
                    (
                        property_id
                        , location_id
                        , price
                        , type_id
                        , description
                        , listing_date
                    )
    VALUES          (
                        var_id
                        , var_locationID
                        , var_price
                        , var_typeID
                        , var_description
                        , CURRENT_TIMESTAMP()
                    )
    ON DUPLICATE KEY UPDATE
                    location_id = var_locationID
                    , price = var_price
                    , type_id = var_typeID
                    , description = var_description;
END;
				
                        
For anyone who might encounter this issue, I decided to the ditch the
INSERT INTO ... ON DUPLICATE KEY UPDATEand put theUPDATEwithin theIFstatement.The statement looks like this: