Mysql PDO未更新

Mysql PDO未更新,mysql,pdo,Mysql,Pdo,如果表中已经有名称,则我的脚本需要更新该表。但它并没有这样做 这是我正在使用的代码 $sth = $db->prepare( 'INSERT INTO track (rsname, overallranknow, overalllevelnow, overallxpnow) VALUES (:name, :Overalln, :Overall1, :Overall2) ON DUPLICATE KEY UPDATE rsname = valu

如果表中已经有名称,则我的脚本需要更新该表。但它并没有这样做

这是我正在使用的代码

$sth = $db->prepare(
  'INSERT INTO track (rsname, overallranknow, overalllevelnow, overallxpnow)
       VALUES (:name, :Overalln, :Overall1, :Overall2)
       ON DUPLICATE KEY UPDATE 
       rsname = values(rsname), 
       overallranknow = values(overallranknow),
       overalllevelnow = values(overalllevelnow),
       overallxpnow = values(overallxpnow)'
);      
$sth->bindValue(':name', $name, PDO::PARAM_STR);
$sth->bindValue(':Overalln', $Overalln, PDO::PARAM_INT);
$sth->bindValue(':Overall1', $Overall[1], PDO::PARAM_INT);
$sth->bindValue(':Overall2', $Overall[2], PDO::PARAM_INT);
$sth->execute();
仅当名称已存在时才应更新。我不知道穆奇关于PDO的事,所以我才问这么多


~Kev(bad english=sorry)

教你这个查询的人没有告诉你,你需要一个唯一的键才能让它工作。

当你在phpMyAdmin或类似的客户端工具中运行查询时,它能工作吗?还可以查看“但它没有这样做”-您是如何确定它没有这样做的?@N.B.它没有这样做=它没有更新表也没有错误消息Gain,您是如何确定它没有这样做的?你怎么知道的?你是如何测试它的?代码的其余部分在哪里?你检查输入变量了吗?我可以说下去,但你明白了,就这样。这是您的第一步-它不工作的方式是它插入相同的名称两次。这告诉你什么?它告诉您重复密钥更新上的
不起作用,因为不存在使其起作用的机制-重复密钥。检测重复密钥的唯一方法是强制具有唯一密钥,这意味着只有1个密钥可以存在,如果您想再次输入相同的密钥,则会触发重复密钥上的
。因此,通过逻辑,你会得出结论,你没有一个合适的钥匙应该在哪里。然后你谷歌“mysql唯一密钥”。没那么难。我该怎么解决这个问题呢?