Подтвердить что ты не робот

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(); 
4b9b3361

Ответ 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(), а не в дальнейшем.

Ответ 2

Нет, один вызов функции mysqli prepare() не может подготовить несколько запросов одновременно. Однако вы можете подготовить более одного запроса к выполнению, используя разные переменные. Документация по этой функции доступна здесь.

Выглядит так, как будто вы пытаетесь настроить транзакцию, это другой вопрос, чем вы задавали. Если это то, что вы действительно хотите знать, то вам нужно будет предоставить больше информации о настройке вашей базы данных и, возможно, больше подробностей о сценарии использования, который вы пытаетесь решить.