【问题标题】:How to fill multiple tables of a database in phpMyAdmin如何在 phpMyAdmin 中填充数据库的多个表
【发布时间】:2013-12-18 22:01:01
【问题描述】:

我正在尝试制作一个允许会员注册的网站。我有一个包含多个表的数据库。简化后如下所示:

Users 有两列:“ID”和“Username”,其中“ID”是主键。

Messages 有两列:“ID”和“Message”,其中“ID”是指 Users 的外键。

UserRank 也有几列,包括一个“ID”,它也是 Users 的外键。

还有更多表使用相同的“ID”来识别用户/成员。

我使用 MySQL 将网页中的数据发送并存储到数据库中,如下所示:

$sqlQuery = "INSERT INTO users (Username) VALUES 
('$username')";
$result=mysql_query($sqlQuery);

Users 按原样填写,但 MessagesUserRank 的“ID”字段仍为空。我想相应地填写它们,即对于 Users 中的每个用户(由于它是主键,他们都有一个唯一的 ID),其他表中也应该有一条记录。

我尝试用其他查询手动填充它们,但这似乎不起作用:

$idQuery = mysql_query("SELECT ID FROM users WHERE Username='$username'");
$result = mysql_fetch_array( $idQuery );
$ID=$result['ID'];

$query= "INSERT INTO Messages (ID) VALUES ('$ID')";
$result=mysql_query($query);

我知道这是一个奇怪的结构,但我不得不尝试一些东西。请在这里指出正确的方向。

【问题讨论】:

  • 你认为用户不需要密码吗?
  • 老实说,看起来您的某些表格结构不佳。在该用户发送或获取消息之前,您不会在消息中包含任何行。并且用户排名可能在用户表中。
  • 也就是说,在插入用户后使用mysql_insert_id()来获取他们的ID。
  • 就像我说的,这是一个简化版本。我遗漏了多个字段,因为它们不相关。
  • @Jessica 别管表名,它们与我的问题无关。我正在尝试在多个表中填写外键“ID”,我的问题仅与此有关。

标签: php mysql sql database phpmyadmin


【解决方案1】:

您以错误的方式构建事物。您需要在线获取一些Conceptual Data Model 课程才能制作结构良好的数据库,因为您缺少很多字段,而且最重要的是您缺少外键

【讨论】:

  • 感谢您的回复。同样,这是数据库的简化视图。为简单起见,我省略了各个字段,因为它们与我的问题无关。此外,我已经正确设置了外键约束,就像我说的那样。
  • 不要只是假设其他条目不重要,进行完整查询以获得更好的错误报告以找出问题所在。当您收到错误消息时,请继续在每一行对您的变量进行回显,以查看哪个查询不返回数据;不要忘记 mysql_query($query) 或 die(mysql_error()) ;看看发生了什么
【解决方案2】:

PHP 语法看起来可以正常运行,但是您的 SQL 查询很可能会失败。这主要是由于您的外键分配和数据库结构。

不过,我建议在您查询后使用 mysql_error();

$sqlQuery = "INSERT INTO users (Username) VALUES ('".$username."')";
$result=mysql_query($sqlQuery) or die(mysql_error());

它应该停止并为您提供更多信息,说明为什么您没有得到预期的结果。

【讨论】:

  • 请使用参数化查询。
  • 不,这仍然不是参数化查询。见stackoverflow.com/questions/60174/…
  • 这是相当离题的,所以我不打算包括另一行。但我明白你的意思。如果要避免 SQL 注入攻击,对每个变量调用 mysql_real_escape_string() 是一种选择。
  • @Bludock,我不认为这是题外话。对数据库问题的每个答案都应包含安全运行查询的代码,否则该资源站点将与大多数网络一起传播不安全的做法。我们可以在这里做得更好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 2012-07-05
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多