2012-03-09 6 views
6

Я хотел бы архивировать студента, перемещая запись из одной таблицы в другую. Это код, который я пытаюсь использовать:php и mysql копировать запись из одной таблицы в другую

<?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; 
} 

Проблема Я имею в том, что я получаю сообщение об ошибке:

Фатальная ошибка: Недостаточно памяти (выделено 80478208) (пытались выделить 80216043 байт) in /archive-student.php в строке XX

Есть ли другой способ сделать это, за исключением того, что имеется столбец с именем archive и изменяется от 0 до 1? Это связано с тем, что у меня есть 30-50 страниц, которые выбирают записи таблицы. :)

+0

Вы можете использовать 'INSERT ... SELECT'. Какова структура ваших таблиц? – bfavaretto

ответ

22
INSERT INTO archive_table 
SELECT * FROM original_table WHERE id = 1 

простой как это.

Если таблицы имеют разное количество столбцов, другой макет и т.д., вы должны указать столбцы: слишком

INSERT INTO archive_table(field1, field2, field3) 
SELECT field7, field8, field9 FROM original_table WHERE id = 1 
+0

Gah, я как раз собирался выбрать то же самое. Я не уверен, что он будет работать, поскольку, поскольку он все еще может вызвать ошибку из памяти –

+0

@ dev-null-dweller SQL-синтаксическая ошибка любых идей? –

+1

@ КонстантинНарышкин - этот не извлекает никаких данных из mysql, поэтому PHP не должен достигать предела памяти. @DavidPassmore был '*' отсутствующий в select, только что скорректировал это. –

2
while($i<(count($row)-1)) 
    { 
     $sql.="'".$row[$i]."',"; 
    } 
    $i=$i+1; 

Вы должны сделать $i=$i+1; внутри цикла ...

Но ,

INSERT INTO archive TABLE 
SELECT FROM original_table WHERE id = 1 

это лучший способ сделать;)

3
INSERT INTO new_table SELECT id FROM old_table 

Рекомендуется перевести одну строку таблицы из любой таблицы в требуемую таблицу.

0
<html> 
    <body bgcolor="lightblue"> 
    <h1>Data fetched from register.php</h1> 
    <table border=1 cellspacing=0 cellpadding=10px> 
    <tr> 
    <th>id</th> 
    <th>fullname</th> 
    <th>email</th> 
    <th>username</th> 
    <th>dob</th> 
    <th>password</th> 
    <th>gender</th> 
    <th>lanuage</th> 
    <th>country</th> 
    </tr> 
    <?php 
    $xyz=mysqli_connect("localhost", "root", "", "myprogrammes"); 
    $abc=mysqli_query($xyz, "select * from table"); 
    while ($bb=mysqli_fetch_array($abc)){ 
      $id1=$bb['id']; 
      $fullname1=$bb['fullname']; 
      $email1=$bb['email']; 
      $username1=$bb['username']; 
      $dob1=$bb['dob']; 
      $password1=$bb['password']; 
      $gender1=$bb['gender']; 
      $lanuage1=$bb['lanuage']; 
      $country1=$bb['country']; 
    ?> 
    <tr> 
    <th><?php echo $id1 ; ?></th> 
    <th><?php echo $fullname1 ; ?></th> 
    <th><?php echo $email1 ; ?></th> 
    <th><?php echo $username1 ; ?></th> 
    <th><?php echo $dob1 ; ?></th> 
    <th><?php echo $password1 ; ?></th> 
    <th><?php echo $gender1 ; ?></th> 
    <th><?php echo $lanuage1 ; ?></th> 
    <th><?php echo $country1 ; ?></th> 
    </tr> 
<?php } ?> 
    </body> 
    </html> 
+0

Добро пожаловать в StackOverflow! Хотя код, который вы опубликовали, может ответить на вопрос, пожалуйста, добавьте некоторое объяснение, почему это ответ. – trincot

Смежные вопросы