使用单个mysql_query插入多个记录可能与否?

时间:2014-10-06 13:00:22

标签: php mysql

我正在开发一个网站,我必须在不同的表格中插入值。所以要保持这种需要,我是否可以在php中使用单个mysql_query中的多个查询。

例如:

mysql_query("insert into tableA (e-mail, name) values ('xxx', 'xxx'); insert into tableB (xxx, xxx, xxx) values ('value1','value2','value3')")

我想在单个语句中运行多个查询。请提出一些解决方案。

3 个答案:

答案 0 :(得分:0)

不,这是不可能的。过时的mysql_* API仅允许一次执行一个查询。为此,您需要使用mysqli API和mysqli_multi_query()

答案 1 :(得分:0)

单个MySQL“INSERT”语句可以支持多个VALUE元组,如果它们属于同一个表。

mysql_query("insert into tableA (e-mail, name) values ('xxx', 'xxx'), ('yyy','yyy')")

但是,使用mysql_*函数无法实现您的目标。

虽然mysqli_* API允许您一次运行多个查询,但我建议您至少出于以下两个原因禁止这样做:

  1. 出于安全原因,使用预准备语句总是一个好的(实际上,伟大的)想法。准备好的陈述可以使用with the MySQLi API以及with PDO
  2. 正如您从mysqli_multi_query() mysql_*所看到的,从该函数中获取错误可能非常麻烦。实际上,如果第一个查询失败,该函数仅返回“false”;要获得其他查询的结果,您需要调用另一个函数。
  3. 一般来说,为什么需要将多个查询组合在一起?最终,你节省的时间很少 相反,如果您的目标是同时执行多个查询,并且如果一个查询失败则使整个查询失败,您可以使用事务(在某些情况下也可以加速插入)。 MySQLi和PDO都支持事务:请参阅此处的示例,了解PDO docs

    PS:一般来说,完全避免使用{{1}}函数是个好主意,因为这些API已被弃用。

答案 2 :(得分:0)

欢迎来到PDO

使用PDO可以执行以下操作:

$sql = "
    insert into tableA (e_mail, name) values (:e_mail, :name); 
    insert into tableB (xxx1, xxx2, xxx3) values (:xxx1, :xxx2, :xxx3)
";

首先准备好Query然后准备VOILA !!

或使用Transaction方法:

$con->beginTransaction();

 $sql1 = "insert into tableA (e_mail, name) values (:e_mail, :name)"; 
 $sql2 = "insert into tableB (xxx, fff) values (:xxx, :fff)";
 $sql3 = "insert into tableC (qqq, bbb) values (:qqq, :bbb)"; 

$con->commit();