首页 文章

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

提问于
浏览
16

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

2 回答

  • 24

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

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

    然后再执行它们 . 如果你想确保两者都不能运行,除非两者都能运行,那么你需要研究交易,就像Thomas说的那样 .

    另外,一般提示:"call to member function on a non-object"是 prepare() 失败时得到的标准错误,因此 $stmt 实际上不是预备语句对象 . 这通常意味着您需要在 prepare() 语句中查找错误,而不是以后查找错误 .

  • 16

    不,单次调用mysqli prepare()函数不能一次准备多个查询 . 但是,您可以使用不同的变量为执行准备多个查询 . The documentation for this function is available here.

    它看起来像你正在尝试设置一个交易,这是一个与你问的不同的问题 . 如果这是您真正想知道的,那么您需要提供有关数据库设置的更多信息,并且可能需要提供有关您尝试解决的用例的更多细节 .

相关问题