当用户单击名为删除的按钮时,我试图将数据从一个数据库(注册)移动到另一个数据库。(我想将数据移动到名为归档的表中)
这是我尝试过的(从谷歌找到):
$result=mysql_query("Insert Into archived (select * from registrations WHERE id=$id") ;
$row = mysql_fetch_array($result);
这不会动它...有人可以帮忙吗?
首先,您缺少一个括号,在这种情况下您根本不必使用
将您的查询字符串更改为
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演示
您尝试的查询只是将信息从一个表复制到另一个表。然后,您必须从第一个表中删除它:
INSERT INTO archived
SELECT * FROM registrations WHERE id = $id;
DELETE FROM registrations WHERE id = $id;
我们可以通过使用循环来做到这一点。这是一个例子:
<?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;
}
}
?>