更新然后更换模具

时间:2012-04-27 20:11:03

标签: php mysql sql

如果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`)
 )

非常感谢

4 个答案:

答案 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

  

REPLACEINSERT完全相同,只是如果表中的旧行与PRIMARY KEYUNIQUE索引的新行具有相同的值,在插入新行之前删除旧行。请参阅Section 13.2.5, “INSERT Syntax”

因此,只要idthesis表中的唯一键,您需要的唯一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');