一尘不染

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

mysql

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

阅读 241

收藏
2020-05-17

共1个答案

一尘不染

一个准备好的语句只能执行一个MySQL查询。您可以在不同的变量中准备任意数量的语句:

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

然后再执行它们。如果您想确保除非一个都能够运行,否则任何一个都不会运行,那么您需要像Thomas所说的那样研究事务。

另外,一个一般性的提示:“在非对象上调用成员函数”是您prepare()失败时遇到的标准错误,因此$stmt实际上不是准备好的语句对象。通常,这意味着您需要在prepare()语句中查找错误,而不是以后查找任何错误。

2020-05-17