【问题标题】:mysql insert statement inside a while statement adds only 1 recordmysql在while语句中插入语句仅添加1条记录
【发布时间】:2015-05-30 16:26:39
【问题描述】:

我有这个代码(参考下面)

$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表中提取所有数据,然后将每一行放入相应的变量中,然后插入存储的数据(那些从db中提取的数据)表名“records”并存储在相应的变量上)到名为“backupp”的数据库表。现在,问题是,它只将一条记录添加到备份中(首先提取的记录),它应该将所有从名为记录的数据库表中提取的记录添加到名为备份的数据库表中。为什么??任何建议、建议、线索和想法将不胜感激。谢谢!

PS:它类似于导出和导入到具有相同结构的其他表,但我有自己的理由为什么要这样做,并假设我已经成功连接到名为“inventory”的数据库 ($this->db)并且那里有数据库表名,例如具有相同结构的“记录”和“备份”。

【问题讨论】:

  • 请阅读一些最新的 PHP 教程,或一些编程教程

标签: php mysql mysqli mysql-insert-id mysqli-multi-query


【解决方案1】:

把你的代码改成这个(见下文)。

$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++;
}

【讨论】:

  • 除了伪造的计数器和删除的返回语句之外,此代码没有任何区别。这个计数器没有理由......
【解决方案2】:

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

【讨论】:

  • 您也可以命名列。INSERT INTO backupp (itemname, itemdesc) SELECT itemname, itemdesc FROM records ..当然每个表中的名称可以不同..
【解决方案3】:

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

删除return $result; 行,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2019-06-28
    • 2022-07-08
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2013-01-29
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多