【问题标题】:Insert into 2 tables from 1 form [duplicate]从1个表格插入2个表格[重复]
【发布时间】:2013-03-27 04:22:48
【问题描述】:

如何从 1 个表格插入 2 个表格?

我想提交到表格中:gallery 和 cat。

这是我刚刚提交到画廊的代码。如何同时向 cat 表添加信息?

$sql = 'INSERT INTO gallery (image_url, image_name, image_description)
VALUES (?, ?, ?)';


$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {

$stmt->bind_param('sss', $_FILES['upload']['name'], $_POST['image_name'],     
$_POST['image_description']);
$OK = $stmt->execute();

}

我该怎么办:

$sql_2 = 'INSERT INTO cat (cat_name) VALUES (?)';

【问题讨论】:

  • 那么你卡在哪里了?继续并在 $sql_2 中绑定类别并执行它。
  • 好的,我在哪里呢?在那个 if 语句里面?还是做一个新的?
  • 我想制作一个新的。
  • 你不能把 2 个语句放在另一个下面吗?
  • 你的常识(你的建议没有帮助,我希望我能反对你)

标签: php mysql sql-server mysqli


【解决方案1】:

在上面的代码之后,只需初始化一个新语句,绑定它,然后执行。您可以使用现有连接 ($conn)。 $sql$stmt 变量已经通过插入第一个表完成了它们的工作,所以只需将它们重置为第二个插入。

... your code as posted above, followed by:

$sql = 'INSERT INTO cat (cat_name) VALUES (?)';
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
  $stmt->bind_param('s', put your cat_name value here);
  $OK = $stmt->execute();
}

要记住的重要一点是,第二次插入与第一次一样:您必须对其进行初始化、绑定和执行。

【讨论】:

  • 谢谢,船长,用常识回答;)
  • 很遗憾,您的回答并没有解决问题。
【解决方案2】:

您应该使用事务as demonstrated here

【讨论】:

  • 我真的很想了解反对意见。需要详细说明吗?
【解决方案3】:

不,您不能在一个 MySQL 命令中插入多个表。但是,您可以使用事务。

开始 INSERT INTO 用户(用户名、密码) 值('测试','测试') 插入个人资料(用户名、简历、主页) VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com'); 提交;

查看 LAST_INSERT_ID 以重用自动增量值。 编辑:您说“经过这么长时间试图弄清楚,它仍然不起作用。我不能简单地将刚刚生成的 ID 放入 $var 并将 $var 放入所有 MySQL 命令中吗?”

让我详细说明一下:这里有 3 种可能的方法:

1/ 就是上面看到的代码。这一切都在 MySQL 中完成,第二个语句中的 LAST_INSERT_ID 将自动成为第一个语句中插入的 autoincrement-column 的值。

不幸的是,当第二条语句本身在具有自增列的表中插入行时,LAST_INSERT_ID 将更新为表 2 的,而不是表 1。如果之后您仍然需要表 1,我们将必须将其存储在变量中。这将我们引向方法 2 和 3:

2/ 将 LAST_INSERT_ID 存储在 MySQL 变量中:

A/ INSERT B/ SELECT LAST_INSERT_ID 到@mysql_variable_here C/ INSERT INTO table2 (@mysql_variable_here D/ INSERT INTO table3 (@mysql_variable_here ...

3/ 将 LAST_INSERT_ID 存储在 php 变量中(或任何可以连接到数据库的语言,您可以选择):

A/ INSERT B/ 使用您的语言来检索 LAST_INSERT_ID,或者通过在 MySQL 中执行该文字语句,或者使用例如 php 的 mysql_insert_id() 来为您 C/ INSERT ()

【讨论】:

猜你喜欢
  • 2015-10-30
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
相关资源
最近更新 更多