【发布时间】: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 时代引入的mysqliAPI 的产物,不应在新代码中使用。 -
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
标签: php mysql database loops foreach