mysqli:它可以在一个语句中准备多个查询吗? [英] mysqli: can it prepare multiple queries in one statement?

查看:23
本文介绍了mysqli:它可以在一个语句中准备多个查询吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I would like to know if i can prepare one mysqli statement that executes multiple queries:

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() ......

In that way it make error: Call to a member function bind_param() on a non-object in...

$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 查询.您可以在不同的变量中准备任意数量的语句:

A prepared statement can only execute one MySQL query. You can prepare as many statements as you want in different variables:

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

然后稍后执行它们.如果您想确保除非两者都能够运行,否则任何一个都不会运行,那么您需要调查事务,就像 Thomas 所说的那样.

And then execute them later. If you want to ensure that neither one is ever run unless both are able to run, then you need to look into transactions, like Thomas said.

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

Also, a general tip: "call to member function on a non-object" is the standard error you get when prepare() fails and so $stmt isn't actually a prepared statement object. It usually means you need to look for an error in your prepare() statement rather than anything later.

这篇关于mysqli:它可以在一个语句中准备多个查询吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆