如果user_id有一行,那么我想更新,如果没有插入(但我被告知要使用替换)。在表中有id(主键,auto inc)和user_id(索引,会话相关)。我有一个表单,当数据被更改时,它应该在会话中为该特定用户的数据库中更改,否则它只是为会话中的特定用户添加
if (empty($err)) {
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']);
$abstract = mysql_real_escape_string($_POST['abstract']);
$query="UPDATE thesis SET thesis_Name ='$thesis_Name',
abstract='$abstract' WHERE id='$_SESSION[user_id]'
IF ROW_COUNT()=0
REPLACE INTO thesis (thesis_Name,abstract)VALUES ('$thesis_Name', '$abstract')
";
mysql_query($query) or die();
// query is ok?
if (mysql_query($the_query, $link) ){
// redirect to user profile
header('Location: myaccount.php?id=' . $user_id);
}
有了这个页面就死了。
编辑:
`thesis` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`thesis_Name` varchar(200) NOT NULL,
`abstract` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
)
非常感谢
答案 0 :(得分:0)
INSERT
INTO thesis (id, abstract, thesis)
VALUES ('$_SESSION[user_id]', '$abstract', '$thesis_Name')
ON DUPLICATE KEY
UPDATE
abstract = VALUES(abstract),
thesis_Name = VALUES(thesis_Name)
答案 1 :(得分:0)
您无需先执行UPDATE
- REPLACE
为您处理所有这些问题。来自MySQL manual:
REPLACE
与INSERT
完全相同,只是如果表中的旧行与PRIMARY KEY
或UNIQUE
索引的新行具有相同的值,在插入新行之前删除旧行。请参阅Section 13.2.5, “INSERT
Syntax”。
因此,只要id
是thesis
表中的唯一键,您需要的唯一SQL就是:
REPLACE INTO thesis (id, thesis_Name, abstract)
VALUES ('$_SESSION[userid]', '$thesis_name', '$abstract');
答案 2 :(得分:0)
你可以用预备语句来做。你可以看到一个例子sql;
DROP PROCEDURE IF EXISTS `UPDATETHESIS`
|
CREATE PROCEDURE `UPDATETHESIS` (IN _id VARCHAR(50), IN _thesis_name VARCHAR(50), IN _abstract VARCHAR(50))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY INVOKER
IF EXISTS (SELECT * FROM thesis WHERE id = _id)
BEGIN
UPDATE thesis SET thesis_Name = _thesis_name,
abstract = _abstract WHERE id = _id
END
ELSE
BEGIN
INSERT INTO thesis (thesis_Name,abstract) VALUES (_thesis_name, _abstract)
END
您可以将其称为CALL UPDATETHESIS(userid, thesis_name, abstratc);
答案 3 :(得分:0)
您的代码中存在一些问题。首先,您不必在同一查询中执行插入和替换:如果没有要替换的行,则替换将插入(此外,我甚至不确定您使用的sql语法是否正确)...
然后你做一个mysql_query($query) or die()
,这可能是你的代码死了的地方(也许是因为你使用的sql语法可能不正确)。
之后,再次执行mysql_query,这将再次重新执行查询。无论如何,如果您的查询不起作用,您的代码将在前一行中死亡......
你可以做的是
$query = "REPLACE INTO blablabla";
if (!mysql_query($query))
echo "the query failed";
else header ("location:blabla");
但是您的查询应该提到您想要更新的user_id 替换论文(id,thesis_Name,abstract) VALUES('{$ _SESSION [userid]}','$ thesis_name','$ abstract');