PHP MYSQL UPDATE if Exist or INSERT if not?

PhpMysqlSql UpdateSql InsertOn Duplicate-Key

Php Problem Overview


I have no idea if this is even remotely correct. I have a class where I would like to update the database if the fields currently exist or insert if they do not. The complication is that I am doing a joining 3 tables (set_colors, school_art, baseimage)

Any help would be really great.

Here is what I have:

public function set_layer_colors($value) {
	global $db;
	
	$result_array = mysql_query("
    IF EXISTS(SELECT * FROM set_colors WHERE school_art_id = '{$value}')
	  
	  UPDATE set_colors (school_art_id, baseimage_id, sub_folder, layer)
		SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer
		FROM school_art 
		JOIN baseimage ON baseimage.base_folder = school_art.series_code 
		WHERE baseimage.image_type = 'B' ORDER BY school_art.id 
		
	ELSE
	
	 INSERT INTO set_colors (school_art_id, baseimage_id, sub_folder, layer)
		SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer
		FROM school_art 
		JOIN baseimage ON baseimage.base_folder = school_art.series_code 
		WHERE baseimage.image_type = 'B' ORDER BY school_art.id 
		");
	
	return $result_array;
}

Php Solutions


Solution 1 - Php

I believe you are looking for the following syntax:

INSERT INTO <table> (field1, field2, field3, ...) 
VALUES ('value1', 'value2','value3', ...)
ON DUPLICATE KEY UPDATE
field1='value1', field2='value2', field3='value3', ...

> Note: With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values.

MySQL Documentation: INSERT ... ON DUPLICATE KEY UPDATE Statement

Solution 2 - Php

Two choices:

MySQL Manual :: INSERT INTO ... ON DUPLICATE KEY UPDATE Syntax

or

MySQL Manual :: REPLACE INTO Syntax

Both will allow you to do the insert-if-not-exists-or-update in one query.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGGcupieView Question on Stackoverflow
Solution 1 - PhpTash PemhiwaView Answer on Stackoverflow
Solution 2 - PhpDan GrossmanView Answer on Stackoverflow