选择定义其他列的mysql列(即数组):-并将其插入php变量
我在数据库中有两列:-copy(即数组)和bookid。我的代码是选择定义其他列的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 | +----------
$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 , ','));`