while语句中的mysqlinsert语句只添加了一条记录


mysql insert statement inside a while statement adds only 1 record

我有这个代码(参见下文)

$sql = "SELECT * FROM records";
$result = mysqli_query($this->db,$sql);
while($row = mysqli_fetch_assoc($result)){
    $itemid = $row['id'];
    $itemname = $row['itemname'];
    $itemdesc = $row['itemdesc'];
    $brand = $row['brand'];
    $serialno = $row['serialno'];
    $nostock = $row['nostock'];
    $price = $row['price'];
    $onsale = $row['onsale'];
    $poster = $row['poster'];
    $thedate = $row['thedate'];
    $sql = "INSERT INTO backupp SET id='$itemid', itemname='$itemname', itemdesc='$itemdesc', brand='$brand', serialno='$serialno', nostock='$nostock', price='$price', onsale='$onsale', poster='$poster', thedate='$thedate'";
    $result = mysqli_query($this->db,$sql) or die(mysqli_error($this->db));
    return $result;
}

正如您从上面的代码中看到的,它将首先从名为"records"的db表中提取所有数据,然后将每一行放入相应的变量中,然后将存储的数据(从数据库表名为"records"中提取并存储在相应变量中的数据)插入名为"backup"的数据库表中。现在,问题是,它只向备份中添加一条记录(首先被提取的记录),应该将所有从数据库表名记录中提取的记录添加到数据库表名备份中。为什么?任何建议、建议、线索和想法都将不胜感激。非常感谢。

PS:它类似于导出和导入到其他具有相同结构的表,但我有自己的原因,为什么我想这样做,并假设我已经成功连接到一个名为"inventory"的数据库($this->db),并且那里有数据库表名,如"records"answers"backup",具有相同结构。

您可以通过以下方式轻松备份同一个表:INSERT INTO backupp SELECT * FROM records

while循环中有一个return语句,导致它在一次迭代后退出。

拆下return $result;线路,它应该可以工作。

将您的代码更改为这个(请参阅下文)。

$sql = "SELECT * FROM records";
$result = mysqli_query($this->db,$sql);
$x = 0;
while($row = mysqli_fetch_assoc($result)){
$itemid = $row['id'];
$itemname = $row['itemname'];
$itemdesc = $row['itemdesc'];
$brand = $row['brand'];
$serialno = $row['serialno'];
$nostock = $row['nostock'];
$price = $row['price'];
$onsale = $row['onsale'];
$poster = $row['poster'];
$thedate = $row['thedate'];
$sql = "INSERT INTO backupp SET id='$itemid', itemname='$itemname', itemdesc='$itemdesc', brand='$brand', serialno='$serialno', nostock='$nostock', price='$price', onsale='$onsale', poster='$poster', thedate='$thedate'";
$result = mysqli_query($this->db,$sql) or die(mysqli_error($this->db));
$x++;
}