0

我正在使用下面的代码,当 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)";
4

2 回答 2

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,那么你必须指定它们。如果您首先只指定导致更新的唯一键,那么它只会更新那个,这很可能什么都不做!

于 2012-04-28T12:15:26.623 回答
0

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

于 2012-04-28T12:15:33.787 回答