当用户单击名为delete的按钮时,我试图将数据从一个数据库(注册)移动到另一个数据库。 (我想将数据移动到名为archived的表中)
以下是我尝试过的内容(来自Google):
$result=mysql_query("Insert Into archived (select * from registrations WHERE id=$id") ;
$row = mysql_fetch_array($result);
这不会动摇它......任何人都可以帮忙吗?
答案 0 :(得分:4)
首先,你缺少一个括号,在这种情况下你根本不需要使用这个括号
将查询字符串更改为
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 演示
答案 1 :(得分:0)
您尝试的查询只是将信息从一个表复制到另一个表。然后,您必须从第一个表中删除它:
INSERT INTO archived
SELECT * FROM registrations WHERE id = $id;
DELETE FROM registrations WHERE id = $id;
答案 2 :(得分:0)
我们可以通过使用loop来实现。这是一个例子:
<?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;
}
}
?>