PHP MYSQL更新(如果存在)或插入(如果不存在)?
我不知道这一点是否正确。我有一个类,如果字段当前存在,我想更新数据库;如果字段不存在,我想插入。复杂的是,我正在做一个连接3个表(设置颜色、学校艺术、基本图像) 任何帮助都会非常好 以下是我所拥有的:PHP MYSQL更新(如果存在)或插入(如果不存在)?,php,mysql,sql-update,sql-insert,on-duplicate-key,Php,Mysql,Sql Update,Sql Insert,On Duplicate Key,我不知道这一点是否正确。我有一个类,如果字段当前存在,我想更新数据库;如果字段不存在,我想插入。复杂的是,我正在做一个连接3个表(设置颜色、学校艺术、基本图像) 任何帮助都会非常好 以下是我所拥有的: public function set_layer_colors($value) { global $db; $result_array = mysql_query(" IF EXISTS(SELECT * FROM set_colors WHERE school_art
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;
}
两种选择:
或
这两种方法都允许您在一个查询中执行插入(如果不存在)或更新操作。我相信您正在寻找以下语法:
INSERT INTO <table> (field1, field2, field3, ...)
VALUES ('value1', 'value2','value3', ...)
ON DUPLICATE KEY UPDATE
field1='value1', field2='value2', field3='value3', ...
插入(字段1、字段2、字段3等)
值('value1','value2','value3',…)
关于重复密钥更新
field1='value1',field2='value2',field3='value3'。。。
注意:使用重复键更新时的时,如果将行作为新行插入,则每行受影响的行值为1
,如果更新现有行,则为2
,如果将现有行设置为其当前值,则为0
MySQL文档:为了更准确,您不需要指示主键。因此,如果field1是一个键,那么。。。。。。在重复密钥更新字段2='value2',字段3='value3'。。。(从field2开始)请记住为目标列指定唯一的constraint@StefanoZanetti,您的字段名不匹配:psw
vspassword
。此外,您还没有在ON DUPLICATE KEY UPDATE子句中指定角色
字段(我不确定这是否重要)。谢谢,对于我的情况,替换为更好,否则我必须调用“$query->send_long_data(1,$buff)”两次,一次用于插入,另一次用于UPDATENOO。。。如果我们使用“替换到”,则如果主数据存在,其他外键相关表的数据将被删除。关于REPLACE
,它会隐式删除它尝试更新的条目并添加一个新条目,因此如果您有自动递增
键,例如ID
,它也会自动递增!