在数据库PHP中一次插入两个表

时间:2012-06-18 20:08:52

标签: php mysql database

我只是想知道是否有可能同时在数据库中插入两个表,如

$query = sprintf("INSERT INTO table ('tableid')values('somevaleu'),INSET INTO table1 ('table1id')values('somevalue')");

或者我需要单独进行,例如,

$query1 = sprintf("INSERT INTO table ('tableid')values('somevaleu')");
$query2 = sprintf("INSET INTO table1 ('table1id')values('somevalue')");

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

如果您使用旧的mysql扩展程序(mysql_*函数),则无法在一个语句中发出多个查询。

来自手册 1

  

mysql_query()发送一个唯一的查询(多个查询不是   支持)到服务器上当前活动的数据库   与指定的link_identifier相关联。

如果您使用mysqlipdo mysql,则可以在一个查询中执行多次插入。

也可以使用扩展插入在一个查询中将多行插入相同的表,但不能在两个不同的表中插入。

答案 1 :(得分:1)

你为什么要这样做?如果它只是懒惰,请花费额外的30秒并使用两个单独的声明。如果,OTOH,你想这样做是因为你需要同时进行两次插入以保持数据库的一致性(例如同时更新“订单”表和“计费”表),你想要查看的交易

基本上,一个事务(以 BEGIN 开头)是一堆捆绑在一起的查询,当你完成后,你可以 COMMIT 并制作它们坚持或 ROLLBACK 将它们扔掉(例如,如果出现错误并且您想要中止该过程)。它们不是完全同时执行,但是在COMMIT上,它们要么全部成功,要么都不会通过。

答案 2 :(得分:0)

您可以使用begin括起多个SQL语句:

$query = "BEGIN ";
$query .= "INSERT INTO table ('tableid')values('somevalue') INSERT INTO table1 ('table1id')values('somevalue') ";
$query .= "COMMIT";

然后运行$query

答案 3 :(得分:0)

这取决于您的数据库的查询方式。我使用的很多第三方数据库抽象库每次执行只允许一个SQL语句。但是,正如你所提议的,MySQL 可以接受由分号分隔的多个查询。