【问题标题】:update database rows using foreach loop使用 foreach 循环更新数据库行
【发布时间】:2018-12-06 17:40:06
【问题描述】:

我的数据库中有一个名为“books_term”的表,

当我提交书籍时,书籍及其类别存储在此表中。 我的一些书有多个类别,所以我决定将每个类别存储为一个新行 + book_id

例如:

id             category_id            book_id
 1                   23                 14
 2                   45                 14
 3                   30                 14

这是“books_term”表结构,可以看到,14号书有三个类别(23,45,30)

一切正常,直到我决定在我的 cms 管理面板中更新这本书。

问题是:如何更新此图书类别? 如果这本书存在于“books_term”中,我该如何更新书籍类别,否则插入? 我应该为此使用foreach 循环吗?

这是我的 php 代码,它不能正常工作,

   $values = $_POST['category'];
   $myid = $_POST['bookid'];
   foreach($values as $value) {
     $check = "SELECT * FROM books_term WHERE book_id = '$myid'";
     $checkresult = mysqli_query($connection,$check);
     if(mysqli_num_rows($checkresult) > 0){
        $update_query = "UPDATE books_term SET category_id = '$value' WHERE book_id = '$myid'";
        mysqli_query($connection,$update_query);
        echo 'updated';
     }else{
        $insert_query = "INSERT INTO books_term (category_id,book_id) VALUES ('$value','$myid')";
        mysqli_query($connection,$insert_query);
        echo 'inserted';
    }
}

在编辑页面,当我选择多个类别并点击更新按钮时,它只是将最后选择的类别设置为book_id 14,如下图所示:

【问题讨论】:

  • 什么不能正常工作?有错误吗?你在检查错误吗?
  • @kchason 在编辑页面中,当我为我的书选择多个类别并单击更新帖子时,此查询将最后选择的类别值(例如:类别 9)设置为书号 14
  • @kchason 看看上面的图片。
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db->prepare("…") 程序接口是 PHP 4 时代引入的 mysqli API 的产物,不应在新代码中使用。
  • 警告:当使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。

标签: php mysql database loops foreach


【解决方案1】:

你可以先删除数据再插入

$values = $_POST['category'];
$myid = $_POST['bookid']; 
$delete_query = "DELETE FROM books_terms WHERE book_id='$myid'";
mysqli_query($connection,$delete_query);
foreach($values as $value) {
    $insert_query = "INSERT INTO books_term (category_id,book_id) VALUES ('$value','$myid')";
    mysqli_query($connection,$insert_query);
    echo 'inserted';
}

【讨论】:

  • 谢谢队友。它正在工作......但正如@kchason 昨天所说,我现在正在使用 pdo 连接到数据库和查询......但我已经测试了你的代码并且它可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多