Php 理解Mysql';在重复键上';

Php 理解Mysql';在重复键上';,php,mysql,insert,edit,Php,Mysql,Insert,Edit,我想避免我经常做的事 选择是否存在 如果存在 更新 否则 插入 问题,我写的句子能做到吗?在我看来,如果我打电话 $update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario) values('$this->nombre', '$ruta', '$u') on duplicate key update urlimagen=values('$ruta')"; 结果将是表中的两个元素具有“casa”名称,对吗

我想避免我经常做的事

  • 选择是否存在
  • 如果存在
    • 更新
  • 否则
    • 插入
问题,我写的句子能做到吗?在我看来,如果我打电话

$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario) values('$this->nombre', '$ruta', '$u') on duplicate key update urlimagen=values('$ruta')";
结果将是表中的两个元素具有“casa”名称,对吗?(而不是编辑urlimagen,因为它将被视为不同的元素,对不对)

我如何通过一句mysql语句来更新urlimagen(用于nombre,iduser组合),如果不存在,则插入它


提前谢谢

更新urlmagen=values(“$ruta”)告诉MySql查找名为
$ruta
值的列。将您的语句更改为使用实际列名

$update = "insert into mapa_etiquetas ('casa','image.png',2) 
                      values('$this->nombre', '$ruta', '$u') 
           on duplicate key update urlimagen=values('$ruta')";
$update = "insert into mapa_etiquetas ('casa','image2.png',2) 
                       values('$this->nombre', '$ruta', '$u') 
           on duplicate key update urlimagen=values('$ruta')";

第一个查询与第二个代码块不匹配

首先

insert into mapa_etiquetas (nombre, urlimagen, id_usuario)
  values ('$this->nombre', '$ruta', '$u'),
    ('$this->nombre', '$ruta2', '$u')
    /*Add more rows here*/
  on duplicate key update
    urlimagen = values(urlimagen)
$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario)
    values('$this->nombre', '$ruta', '$u') 
    on duplicate key update urlimagen=values('$ruta')";
秒:不正确

insert into mapa_etiquetas (nombre, urlimagen, id_usuario)
  values ('$this->nombre', '$ruta', '$u'),
    ('$this->nombre', '$ruta2', '$u')
    /*Add more rows here*/
  on duplicate key update
    urlimagen = values(urlimagen)
$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario)
    values('$this->nombre', '$ruta', '$u') 
    on duplicate key update urlimagen=values('$ruta')";
第二个块的问题是,您正在命名列名应该放在哪里的值。我认为正确的第二块应该是:

秒:已更正

$update = "insert into mapa_etiquetas ('casa','image.png',2) 
                  values('$this->nombre', '$ruta', '$u') 
       on duplicate key update urlimagen=values('$ruta')";
$update = "insert into mapa_etiquetas ('casa','image2.png',2) 
                   values('$this->nombre', '$ruta', '$u') 
       on duplicate key update urlimagen=values('$ruta')";

我也同意Scrum Meister的观点。关于“重复密钥更新”条款的适当使用,应注意他们的回答。

替换可能会对您有所帮助?这是不可能知道的:这取决于您的表键。此外,您应该安装HeidiSQL或任何其他MySQL客户端,并在那里测试您的SQL代码。如果您看到的只是生成SQL的PHP代码,而不是代码本身,那么SQL可能很难调试