mysqli的:它可以在一个声明中准备多个查询?(mysqli: can it prepare mu

2019-06-17 12:53发布

我想知道如果我可以准备执行多个查询一个mysqli的语句:

mysqli->prepare(query1 ...1,2,3 param...; query2...4,5 param...);
or 
mysqli->prepare(insert into ...1,2,3 param...; insert into...4,5 param...);
and after all
mysqli->bind_param("sssss", 1, 2, 3, 4, 5);

以这种方式,使错误:调用一个成员函数bind_param()在一个非对象...

$stmt = $sql->getQueryPrepare("INSERT INTO user (id_user, username, pw, email) VALUES (?,?,?,?); INSERT INTO process (id_user, idp) VALUES (?,?);");

$stmt->bind_param("ssssss",$id, $username, $pw, $email, $id, $idp);

$stmt->execute();
$stmt->close(); 

Answer 1:

准备好的语句只能执行一个MySQL查询。 你可以准备为你在不同的变量要尽可能多的语句:

$stmtUser = $sql->prepare("INSERT INTO user (id_user, username, pw, email) VALUES (?,?,?,?)");
$stmtProc = $sql->prepare("INSERT INTO process (id_user, idp) VALUES (?,?);");

再后来执行。 如果你想确保没有人是永远运行,除非双方都能够运行,那么你需要考虑的交易,就像托马斯说。

另外,一般的提示:“非对象上调用成员函数”是你当标准错误prepare()失败,那么$stmt实际上不是准备语句对象。 这通常意味着你需要看看在你的错误prepare()语句,而不是什么更高版本。



Answer 2:

没有,到mysqli的一个电话prepare()函数不能一次准备多个查询。 你可以,但是,通过使用不同的变量准备要执行多个查询。 这个函数的文档可以在这里找到。

它也像你试图建立一个交易,这比你问一个不同的问题。 如果这是你真的想知道,那么你就需要提供有关您的数据库设置,可能更多的细节你正在试图解决的用例的详细信息。



文章来源: mysqli: can it prepare multiple queries in one statement?