У меня есть два столбца в базе данных: - 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'
и прежде чем он должен убедиться, что в базе данных для B1
могут быть сохранены только значения UNIQUE.
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')");
Как говорится в некоторых комментариях, это не лучший способ, но это возможно.
Вы можете получить все 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
$copies2 = explode(",",rtrim($copies , ','));
before array_intersect Спасибо, код очень помогает.
Решил сам, добавив только одну строку
'$copies2 = explode(",",rtrim($copies , ','));'
перед array_intersect
Благодаря коду очень помогает.
Таким образом, мне кажется, что проблема заключается в том, что исходная схема DB данных имеет некоторые проблемы.
SQL-подобная БД не является отличным местом для размещения значения стиля "массив". У этого уже есть механизм для этого: таблица ссылок.
Это избавит вас от необходимости вручную перетасовывать ваши первичные ключи в этой таблице. Это проще проверить и проверить.
Если вы хотите сделать это с помощью php-кода, например, у вас нет доступа SQL, например, в контролируемой среде сборки, вы должны использовать "строковые ключи" для вашего $ copyid (переименование подсказки в $ copyidmap) до группироваться вместе как части данных и сохранять ключевые отношения. поэтому следующее будет уникальным: map-> {bookId} → {copyid} → {id}//Где id - это идентификатор первичной таблицы. Очевидно, проверять и выполнять ваши неопределенные назначения массива.