首页 > 解决方案 > 选择定义其他列的mysql列(这是数组):-并将其插入到php变量中

问题描述

我在数据库中有两列:- copy(这是数组)和bookid。我的代码是;

$query = mysqli_query($db, "select copy from book_outward WHERE bookid like 'B1'");
while ($row = mysqli_fetch_array($query)) {
    $copyid = $row['copy'];
}

数据库显示是这样的

+----------------+
| id copy bookid |
+----------------+
| 1  1    B1     |
| 2  2,3  B1     |
| 3  4    B1     |
| 4  2    B2     |
+----------------+

但它只存储在“B1”中输入的最后一个值。我也试过

$copyid[] = $row['copy'];

但在这种情况下,我每次都必须手动更改数组键。

我的目标是插入copy into column bookid='B1'和之前必须确保只有 UNIQUE 值可以存储在数据库中B1

HTML :-

<input type="text" name="bookid" />
<input type="text" name="copies[]" />

用于插入的 PHP 代码:-

$book_id = $_POST['bookid']; 
$copies = implode(',',$_POST['copies']);
$result = mysqli_query($db, "insert into book_outward(bookid,copy) values ('$book_id','$copies')");

标签: phpmysqlarrays

解决方案


正如一些评论所提到的,它不是最好的方法,但它是可能的。

您可以通过以下方式获取所有copyid数据:

$query = mysqli_query($db, "select copy from book_outward WHERE bookid like 'B1'");
$copyid = "";
while ($row = mysqli_fetch_array($query)) {
    $copyid .= $row['copy'] . ",";
}
$copyidsFromDB = explode(",",rtrim($copyid , ','));

之后,您可以使用array_intersect检查您在请求中获得的内容是否在其中:

$copies = $_POST['copies']
// if not an array use: $copies = explode(",", $_POST['copies'])
if (count(array_intersect($copies, $copyidsFromDB) == 0) 
    // insert to DB

推荐阅读