sql插入和更新问题

时间:2009-04-09 09:32:07

标签: php mysql ajax

我有一个将数据插入数据库的表单。此表单获取字段的内容,然后显示结果页面,显示在上下文中输入的信息。此页面上有一个链接用于编辑用户信息,该信息将返回到上一个表单。显然,我不希望插入重复记录。如果记录已存在,是否有一种简单的方法可以使用更新语句?我用ajax和php做这个。

4 个答案:

答案 0 :(得分:5)

看看:

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只应在绝对必要时使用,出于安全原因,还应避免像您这样的问题。