我有一个将数据插入数据库的表单。此表单获取字段的内容,然后显示结果页面,显示在上下文中输入的信息。此页面上有一个链接用于编辑用户信息,该信息将返回到上一个表单。显然,我不希望插入重复记录。如果记录已存在,是否有一种简单的方法可以使用更新语句?我用ajax和php做这个。
答案 0 :(得分:5)
看看:
INSERT ... ON DUPLICATE
:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html REPLACE INTO
:http://dev.mysql.com/doc/refman/5.0/en/replace.html INSERT ... ON DUPLICATE
将允许您在匹配UNIQUE INDEX或PRIMARY KEY时发出UPDATE查询。
REPLACE
的工作方式完全相同,但如果找到该行,则会在插入新行之前删除旧行。使用级联删除时,尤其要考虑到这一点!
答案 1 :(得分:2)
MySQL支持将ON DUPLICATE KEY UPDATE添加到INSERT语句中,该语句可以执行您想要的操作。
答案 2 :(得分:1)
假设您有“用户名”或“电子邮件”这样的字段,您可以使用该字段来检查记录是否已存在,如果已存在,则更新它。
$res = mysql_query("SELECT primary_key FROM my_table WHERE `email` = '" . mysql_real_escape_string($email) . "'");
if($row = mysql_fetch_array($res))
{
// Record exists, update it
$q = "UPDATE my_table SET `username` = '" . mysql_real_escap_string($username) . "' WHERE primary_key = " . (int) $row['primary_key'];
}
else
{
// Record doesn't exist, insert
$q = "INSERT INTO my_table(username, email) VALUES('" . mysql_real_escape_string($username) . "', '" . mysql_real_escape_string($email) . "');";
}
在上面的示例中,我假设您有一个主键字段,它是一个整数(primary_key)。
答案 3 :(得分:0)
你应该考虑使用像http://www.ezpdo.net/blog/?p=2这样的ORM Web应用程序中的纯SQL只应在绝对必要时使用,出于安全原因,还应避免像您这样的问题。