我使用下面的代码,当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)";
答案 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如果插入查询遇到重复密钥,它将更新该行。