2012-03-09 53 views
6

Tôi muốn lưu trữ một sinh viên bằng cách di chuyển bản ghi từ bảng này sang bảng khác. Đây là mã tôi đang cố gắng sử dụng:bản ghi php và mysql từ bảng này sang bảng khác

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

Vấn đề tôi đang gặp là tôi đang nhận được lỗi:

Fatal error: Hết bộ nhớ (phân bổ 80.478.208) (đã cố gắng để phân bổ 80.216.043 byte) trong /archive-student.php trên dòng XX

Có cách nào khác để làm điều này, ngoại trừ có một cột được gọi là lưu trữ và thay đổi từ 0 đến 1? Điều này là do tôi có 30-50 trang chọn các bản ghi của bảng. :)

+0

Bạn có thể sử dụng 'INSERT ... SELECT'. Cấu trúc bảng của bạn là gì? – bfavaretto

Trả lời

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

đơn giản như vậy.

Nếu bảng có số cột khác nhau, bố trí khác vv, bạn sẽ phải chỉ rõ các cột: quá

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

Gah, tôi sắp sửa chọn cùng một thứ. Tôi không chắc chắn rằng nó sẽ làm việc mặc dù, vì nó vẫn có thể gây ra ra khỏi lỗi bộ nhớ –

+0

@ dev-null-dweller một lỗi cú pháp sql bất kỳ ý tưởng? –

+1

@KonstantinNaryshkin - chương trình này không truy xuất bất kỳ dữ liệu nào từ mysql vì vậy PHP không nên đạt tới giới hạn bộ nhớ. @DavidPassmore đã có '*' mất tích trong lựa chọn, chỉ cần sửa chữa đó. –

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

Bạn phải làm $i=$i+1; bên trong vòng lặp ...

Nhưng ,

INSERT INTO archive TABLE 
SELECT FROM original_table WHERE id = 1 

là cách tốt nhất để làm;)

3
INSERT INTO new_table SELECT id FROM old_table 

Cách tốt nhất là di chuyển một hàng trong bảng từ bất kỳ bảng nào sang bảng bắt buộc.

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

Chào mừng bạn đến với StackOverflow! Mặc dù mã bạn đăng có thể trả lời câu hỏi, vui lòng thêm một số giải thích tại sao đó là câu trả lời. – trincot

Các vấn đề liên quan