mysqli:它可以在一个语句中准备多个查询吗?

我想知道如果我可以准备一个执行多个查询的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(); 

准备好的语句只能执行一个MySQL查询。 您可以根据需要在不同的variables中准备多个语句:

 $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()语句中查找错误,而不是稍后再查找。

不,一次调用mysqli prepare()函数就不能一次准备多个查询。 但是,您可以使用不同的variables准备多个查询来执行。 这个function的文档可以在这里find。

它也看起来像你试图build立一个交易,这是一个不同于你问的问题。 如果这就是你真正想知道的,那么你需要提供更多关于你的数据库设置的信息,以及更多关于你正在尝试解决的用例的细节。