зарегистрированный пользователь INSERT-INTO объединенные таблицы в PHP

1

Вот реляционная схема моей БД. Где articol - это "бумага", "citare" - это "цитата" на английском языке:

Изображение 174551

Пользователь регистрируется с идентификатором и паролем и с помощью интерфейса, он представил свои данные в БД. Код очень хорошо подходит для добавления "бумаги", но теперь я хочу, чтобы пользователь представил свои "цитаты" соответствующей "бумаги". Проблема заключается в том, что код позволяет ввести цитату в таблицу "цитата" ("цитата"), но я не знаю, как связать эту "цитату" с "бумагой" ("articol") и с зарегистрированным "пользователем" в PHP-код?

session_start();
$user = $_SESSION['username'];
$pass = mysql_real_escape_string(encrypt_decrypt('encrypt',      $_SESSION['password']));

//there is code here...

$AddQuery="INSERT INTO 'citare'  (articolCitat, titluCitare, autoriCitare, publicatieCitare, isiCitare, volCitare, noCitare, anCitare, linkCitare) VALUES ('$_POST[narticolcitat]','$_POST[ntitlucitare]','$_POST[nautoricitare]','$_POST[npublicatiecitare]','$_POST[nisicitare]','$_POST[nvolcitare]','$_POST[nnocitare]','$_POST[nancitare]','$_POST[nlinkcitare]' )";
mysql_query($AddQuery, $link);
$last_id_inserted_from_citare = mysql_insert_id($link);
$AddQuery="INSERT INTO artcitare (idArticol, idCitare) VALUES ('{$_POST['hidden_articol']}','".$last_id_inserted_from_citare."')";
mysql_query($AddQuery, $link);
  • 1
    функции mysql_ все еще работают? Они устарели. У вас там SQL-инъекция + пароль небезопасен без соли и сильного хеширования. Если вы хотите использовать бумагу в качестве требования для ссылки, то в таблице paper_id в таблице цитирования не должно быть NULL.
  • 0
    Спасибо @DanFromGermay Я буду изменять код. Поскольку сайт находится в разработке, теперь моя проблема - это команда INSERT.
Показать ещё 2 комментария
Теги:
inner-join

1 ответ

0

Что касается того, что вы хотите знать, в основном вы не можете одновременно вставлять в две разные таблицы (поэтому INNER JOIN в этом случае не помогает). Вам нужно сделать первый, а затем другой. Вы можете обернуть их в транзакцию, что сделает ее более надежной.

Порядок важен. Сначала вам нужно вставить основные объекты, а затем заполнить таблицы ассоциаций для своих многих. Это означает, что для того, чтобы ассоциировать "citare", "articol" и "user", они должны быть вставлены первыми. После этого вам нужно создать соответствующие INSERT в таблицах "artcitare" и "userart", чтобы связать их.

Сказав это, я думаю, что вы можете запутать процесс хранения данных в базе данных из процесса поиска. Из примера кода кажется, что сущность "articol" уже сохраняется в базе данных, и вы только пытаетесь связать с ней "citares". Если сущность "articol" уже сохранена, я бы предположил, что соответствующая ассоциация "userart" также существует. Следовательно, когда вы вставляете "citares" и связываете их с "articols" через таблицу ассоциаций "artcitare", вы уже связываете их с пользователем.

  • 0
    Вы хорошо понимаете @hasumedic: ассоциации существуют, команда INSERT работает очень хорошо для всех таблиц, кроме 'citare'! Когда я вставляю "citare" и связываю его с "articol" через таблицу ассоциаций "artcitare", ссылка на пользователя не подразумевается!
  • 0
    Если вы говорите, что каждый «citare» принадлежит «пользователю», вам не хватает внешнего ключа «idUser» между «citare» и «пользователем».
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню