简体   繁体   English

$ mysqli->准备使用SQL事务

[英]$mysqli->prepare with SQL Transactions

I am pretty new to SQL Transactions and tried to execute following statement which did unfortunately not work... 我对SQL Transactions很陌生,并尝试执行以下语句,但不幸的是它不起作用...

$stmt = $mysqli->prepare("

BEGIN;

INSERT INTO groups (group_name, group_desc, user_id_fk) VALUES ("'.$groupName.'","'.$groupDesc.'","'.$user_id.'");

INSERT INTO group_users (group_id_fk, user_id_fk) VALUES (LAST_INSERT_ID(), "'.$username.'");

COMMIT;

") or trigger_error($mysqli->error, E_USER_ERROR);

$stmt->execute();

$stmt->close();

Is this even possible what I am trying here or is it completely wrong? 我在这里尝试的可能吗,还是完全错误?

I appreciate every response, thank you! 感谢您的答复,谢谢!

You are using prepare() wrong way. 您使用错误的prepare()方法。 There is absolutely no point in using prepare() if you are adding variables directly in the query. 如果直接在查询中添加变量,则使用prepare()绝对没有意义。

This is how your queries have to be executed: 这是必须执行查询的方式:

$mysqli->query("BEGIN");

$sql = "INSERT INTO groups (group_name, group_desc, user_id_fk) VALUES (?,?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ssi",$groupName,$groupDesc,$user_id);
$stmt->execute();

$sql = "INSERT INTO group_users (group_id_fk, user_id_fk) VALUES (LAST_INSERT_ID(), ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s",$username);
$stmt->execute();

$mysqli->query("COMMIT");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM