插入else更新时添加重复行

时间:2012-04-28 12:12:22

标签: php mysql

我使用下面的代码,当user_id没有设置为唯一时,它使用相同的user_id两次输入相同的数据。所以我把它设置为唯一,现在只是得到错误,查询失败。 非常感谢所有帮助:(

    if (empty($err)) {
        $thesis_Name = mysql_real_escape_string($_POST['thesis_Name']);

       $abstract = mysql_real_escape_string($_POST['abstract']);


        // insert into the database
        $the_query ="SELECT * FROM thesis WHERE user_id='$_SESSION[user_id]'";
        $testResult = mysql_query($the_query) or die('Error, query failed');

        if(mysql_fetch_array($testResult) == NULL){

            //insert...
            $the_query ="INSERT INTO thesis (`user_id`,`thesis_Name`,`abstract`)
   VALUES ($user_id, $thesis_Name, $abstract)";
            $result = mysql_query($the_query) or die('Error, query failed') ;
        }
   else{

            //update...
    $the_query = "UPDATE thesis
    SET thesis_Name='$thesis_Name', abstract='$abstract'
    WHERE user_id='$_SESSION[user_id]'";
            $result = mysql_query($the_query)or die('Error, query failed');
        }

     // query is ok?
     if (mysql_query($the_query, $link) ){
      // redirect to user profile
     header('Location: myaccount.php?id=' . $user_id);

    }

我也试过

$the_query =   "INSERT INTO thesis (`user_id`,`thesis_Name`,`abstract`)
VALUES ($user_id, $thesis_Name, $abstract)
ON DUPLICATE KEY UPDATE thesis_Name=VALUES(thesis_Name), abstract=VALUES(abstract)";

2 个答案:

答案 0 :(得分:2)

使用ON DUPLICATE KEY UPDATE。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

示例:

INSERT INTO thesis (`user_id`,`thesis_Name`,`abstract`)
VALUES ($user_id, $thesis_Name, $abstract)
ON DUPLICATE KEY UPDATE thesis_Name=VALUES(thesis_Name), abstract=VALUES(abstract)

这基本上处理了在MySQL端的INSERT和UPDATE之间的重复检查和选择,这要快得多(大约2倍)。作为奖励,VALUES()函数允许您从正在插入的行中检索值,这样您就不必提供两次值,并且多行插入可以正常工作。

回应对OP的编辑:

您必须在UPDATE子句中指定要更改的各个列。如果要更新thesis_Name和abstract,则必须指定它们。如果您只是首先指定了导致更新的唯一键,那么它只会更新,这很可能什么都不做!

答案 1 :(得分:0)

我认为您正在寻找的是:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html如果插入查询遇到重复密钥,它将更新该行。