【问题标题】:$mysqli->prepare with SQL Transactions$mysqli->准备 SQL 事务
【发布时间】:2016-03-06 14:40:21
【问题描述】:

我对 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();

这可能是我在这里尝试的还是完全错误的?

感谢您的每一个回复,谢谢!

【问题讨论】:

  • 请描述“没用”。
  • 好吧,我在提交表单后出现了一个空白屏幕......不过,我最初的问题仍然存在,好像这个语句甚至可以通过这个函数提交?
  • 你在哪里绑定你的参数?

标签: php mysql sql mysqli transactions


【解决方案1】:

您以错误的方式使用 prepare()。如果您直接在查询中添加变量,那么使用 prepare() 绝对没有意义。

这就是您的查询必须执行的方式:

$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");

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2012-10-12
    • 2010-11-17
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多