php和mysql从一个表复制记录到另一个表

Dav*_*ore 8 php mysql copy

我想通过将记录从一个表移动到另一个表来存档学生.这是我尝试使用的代码:

<?php
ini_set('memory_limit', '100M');
$sql="Select * from `register` where student_id=".$student_id;
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

//Call the function to archive the table
//Function definition is given below
archive_record(archive,$row);

//Once you archive, delete the record from original table

$sql = "Delete from `register` where student_id=".$student_id;
mysql_query($sql);


function archive_record($archived_tablename,$row)
{
    $sql = "insert into $archived_tablename values(";
    $i=0;
    while($i<(count($row)-1))
    {
        $sql.="'".$row[$i]."',";
    }
    $i=$i+1;

    $sql.="'".$row[$i]."'";
    $sql.=")";

    mysql_query($sql);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我收到错误:

致命错误:第XX行的/archive-student.php内存不足(分配80478208)(试图分配80216043字节)

有没有不同的方法来做到这一点,除了有一个名为archive的列并从0更改为1?这是因为我有30-50页选择表的记录.:)

dev*_*ler 31

INSERT INTO archive_table
SELECT * FROM original_table WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

就那么简单.

如果表具有不同的列号,其他布局等,则还必须指定列:

INSERT INTO archive_table(field1, field2, field3)
SELECT field7, field8, field9 FROM original_table WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

  • @dickwan您可以在有限制的循环中运行它,例如“SELECT * FROM original_table LIMIT 10000 OFFSET 0”,然后是“SELECT * FROM Original_table LIMIT 10000 OFFSET 10000”。这允许您保存数据块之间的进度。 (2认同)