Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择定义其他列的mysql列(即数组):-并将其插入php变量_Php_Mysql_Arrays - Fatal编程技术网

选择定义其他列的mysql列(即数组):-并将其插入php变量

选择定义其他列的mysql列(即数组):-并将其插入php变量,php,mysql,arrays,Php,Mysql,Arrays,我在数据库中有两列:-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 | +----------

我在数据库中有两列:-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'];
但在这种情况下,我每次都必须手动更改数组键

我的目标是在bookid='B1'列中插入
copy
,然后确保在
B1
的数据库中只能存储唯一的值

HTML:-

<input type="text" name="bookid" />
<input type="text" name="copies[]" />
$book_id = $_POST['bookid']; 
$copies = implode(',',$_POST['copies']);
$result = mysqli_query($db, "insert into book_outward(bookid,copy) values ('$book_id','$copies')");

正如一些评论提到的那样,这不是最好的方式,但它是可能的

您可以通过以下方式获得所有
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 , ','));
之后,您可以使用以下方法检查请求中的内容是否存在:


我自己加一行就解决了

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

array\u intersect之前
非常感谢code的帮助。

所以,我觉得问题在于原始数据数据库模式存在一些问题

类似sql的DB不是放置“数组”样式值的好地方。它已经有了这样做的机制:一个链接表

这样就省去了在这个表中手动移动主键的麻烦。它更容易检查和验证


如果您必须通过php代码执行此操作,例如,您没有SQL访问权限,就像在受控构建环境中一样,那么您应该利用“字符串键”在$copyid上(提示重命名为$copyidmap)将数据片段分组在一起,并保留键关系。 因此,以下内容将是独一无二的:
map->{bookId}->{copyid}->{id}//,其中id是主表id。显然,验证并执行未定义的数组赋值。

数据库中副本的数据类型是什么?@suresh数据类型是“VARCHAR”
bookId='B1'
bookId,如“%B1%”
永远不会像copy(即数组)那样存储值。您可以显示示例数据吗?您可以有多行
bookid
作为
B1
,但每个行在复制列中必须有不同的值?谢谢。提供了很多帮助,但最后一步“计数(数组相交)”不起作用。它不检查两个数组中的重复值。如果intersect部分也开始工作,我将非常感激。我自己通过添加一行来解决这个问题
$copies2=explode(“,”,rtrim($copies,,”)在数组相交之前感谢代码的帮助。
`$copies2 = explode(",",rtrim($copies , ','));`