并将其插入php变量

igsr9ssn  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(372)

我有两个专栏database:- copy (即array)和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' 在此之前,它必须确保只有唯一的值可以存储在数据库中 B1 .
html格式:-

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

php代码inserting:-

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

n3ipq98p1#

正如一些评论提到的,这不是最好的方法,但它是可能的。
您可以获得所有 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\u intersect检查请求中的内容是否在其中:

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

xuo3flqw2#

所以,在我看来,问题是原始的datadb模式有一些问题。
类似sql的db并不是放置“array”样式值的好地方。它已经有了这样做的机制:一个链接表。
这样就省去了在这个表中手动切换主键的麻烦。更容易检查和验证。
如果您必须通过php代码来实现这一点,例如,您没有sql访问权限,比如在受控构建环境中,那么您应该利用“字符串键”在$copyid上(提示rename to$copyidmap)将数据分组,并保留键关系。所以下面的内容是唯一的:map->{bookid}->{copyid}->{id}//其中id是主表id。

o4tp2gmn

o4tp2gmn3#

我自己加一行就解决了

`$copies2 = explode(",",rtrim($copies , ','));`

之前 array_intersect 谢谢,代码帮了大忙。

相关问题