【问题标题】:logged user INSERT-ing INTO joined tables in PHP在 PHP 中记录的用户 INSERT-ing INTO 连接的表
【发布时间】:2015-05-22 10:38:49
【问题描述】:

这是我的数据库的关系模式 其中 'articol' 是 'paper','citare' 是英文中的 'citation':

用户正在使用 ID 和密码登录并使用界面,他在数据库中介绍了他的数据。该代码非常适合添加“论文”,但现在我希望用户介绍他对相应“论文”的“引用”。问题是代码允许在表'引文'('citare')中引入引文,但我不知道如何将此'引文'与'paper'('articol')和登录的'user'相关联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);

【问题讨论】:

  • mysql_ 功能仍然有效吗?它们已被弃用。你在那里有 SQL 注入 + 如果没有盐和强哈希,密码是不安全的。如果你想要一篇论文作为引用的要求,那么引用表中的 paper_id 一定不能为 NULL。
  • 谢谢@DanFromGermay!我将修改代码。由于网站正在建设中,现在我的问题是 INSERT 命令。
  • 您应该首先检查纸张/书籍是否存在 (SELECT),如果不存在则显示错误,允许用户在添加引用之前插入纸张。我希望我理解你的问题,你可以解决它:)
  • 是的,@DanFromGermay,该论文已经存在于数据库中!用户必须添加他的引文。 :(

标签: php sql inner-join


【解决方案1】:

就你想知道的而言,基本上你不能同时插入到 2 个不同的表中(因此 INNER JOIN 在这种情况下没有帮助)。你需要先做一个,然后再做另一个。 您可以将它们包装在事务中,这将使其更加健壮。

顺序很重要。您首先需要插入主要实体,然后为您的多对多填写关联表。这意味着为了关联“citare”、“articol”和“user”,需要先插入它们。之后,您需要在“artcitare”和“userart”表中创建适当的 INSERT 来关联它们。

话虽如此,我认为您可能会混淆将数据持久化到数据库中的过程与检索过程。从您的代码示例中,似乎实体“articol”已经保存在数据库中,而您只是试图将“citares”与它相关联。如果“articol”实体已经存在,我会假设相应的“userart”关联也存在。因此,当您插入“citares”并通过“artcitare”关联表将它们关联到“articols”时,您已经将它们链接到用户。

【讨论】:

  • 你很好理解@hasumedic:关联存在,INSERT 命令对所有表都非常有效,除了 'citare' !当我插入“citare”并通过“artcitare”关联表将其关联到“articol”时,并不暗示与用户的链接!
  • 如果您的意思是每个“citare”都属于一个“用户”,那么您在“citare”和“user”之间缺少一个“idUser”外键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多