4

当用户单击名为删除的按钮时,我试图将数据从一个数据库(注册)移动到另一个数据库。(我想将数据移动到名为归档的表中)

这是我尝试过的(从谷歌找到):

 $result=mysql_query("Insert Into archived (select * from registrations WHERE id=$id") ;
 $row = mysql_fetch_array($result);

这不会动它...有人可以帮忙吗?

4

3 回答 3

6

首先,您缺少一个括号,在这种情况下您根本不必使用

将您的查询字符串更改为

Insert Into archived (select * from registrations WHERE id=$id)
                     ^                                        ^

或者只是

Insert Into archived select * from registrations WHERE id=$id

这是SQLFiddle演示

其次INSERT不返回结果集,所以你不应该使用mysql_fetch_array().

第三,如果您的意图不仅仅是复制数据,那么您还需要删除之后复制的行


现在你可以把它全部放在一个存储过程中

DELIMITER $$
CREATE PROCEDURE move_to_archive(IN _id INT)
BEGIN
    START TRANSACTION;
    INSERT INTO archived 
    SELECT * 
      FROM registrations 
     WHERE id = _id;
    DELETE
      FROM registrations 
     WHERE id = _id;
    COMMIT;
END$$
DELIMITER ;

示例用法:

CALL move_to_archive(2);

这是SQLFiddle演示

于 2013-10-27T15:54:54.390 回答
1

您尝试的查询只是将信息从一个表复制到另一个表。然后,您必须从第一个表中删除它:

INSERT INTO archived 
SELECT * FROM registrations WHERE id = $id;

DELETE FROM registrations WHERE id = $id;
于 2013-10-27T15:55:48.367 回答
0

我们可以通过使用循环来做到这一点。这是一个例子:

<?php
        if (isset($_POST['move'])) {

            $userid = $_POST["user_id"];
            $sql = " INSERT INTO `teachers_archive` SELECT * FROM `teachers` WHERE user_id='$userid'";

            if ($conn->query($sql) === TRUE) {
                $query = "DELETE FROM `teachers` WHERE user_id='$userid' ";
                if ($conn->query($query) === TRUE) {
                    $message = "Success!";
                    echo "<script type='text/javascript'>alert('$message');</script>";
                    echo"<script>document.location='mt.php';</script>";
                } else {
                    echo "Error: " . $query . "<br>" . $conn->error;
                }
            } else {
                echo "Error: " . $sql . "<br>" . $conn->error;
            }
        }
        ?>
于 2018-05-21T01:16:54.787 回答