【问题标题】:Mysqli commit in other functionMysqli 在其他函数中提交
【发布时间】:2013-08-13 00:06:04
【问题描述】:

我有一个包含许多函数的 PHP 类,这是我的问题:

在函数 A 中,我做了一些准备插入数据库的步骤 但我不提交,因为我想在其他函数(B 函数)中执行此代码。 但是在数据库中没有插入一行。

有什么想法吗?

谢谢大家,这是我的示例代码:

public static function functionA($id, $email, $password, $name, $surname) {

    global $mysqli;

    $mysqli = self::getDb(); //with $mysqli->autocommit(FALSE); 

    if (!($stmt = $mysqli->prepare('INSERT INTO User (Id, mail, Password, Name, Surname) VALUES (?,?,?,?,?)'))){

           self::closeDatabase($mysqli, $stmt);
           die;
    }

    if (!$stmt->bind_param("sssss", $id, $email, $password, $name, $surname)) {

        self::closeDatabase($mysqli, $stmt);
        die;
    }

    if (!$stmt->execute()) {

        self::closeDatabase($mysqli, $stmt);
        die;
    }

}
public static function functionB() {

    global $mysqli;

    $mysqli->commit();

    self::closeDatabase($mysqli, $stmt);
}

【问题讨论】:

  • 如何使用属性,而不使用global
  • 请在您的问题中添加一些代码和查询示例。
  • 现在我发布了一个简单的代码,谢谢
  • 我认为这不是您使用的真实代码?那就发帖也没用
  • 我只改了smplify的函数名,其余的和我的代码一模一样

标签: php mysqli commit


【解决方案1】:

更改此代码

if (!($stmt = $mysqli->prepare('INSERT INTO User (Id, mail, Password, Name, Surname) VALUES (?,?,?,?,?)'))){


    self::closeDatabase($mysqli, $stmt);
    die;
}

到这个:

$sql = 'INSERT INTO User (Id, mail, Password, Name, Surname) VALUES (?,?,?,?,?)';
if (!($stmt = $mysqli->prepare($sql)))
{
    throw new Exception($mysqli->error." [$sql]");
}

您的所有查询。
然后确保您可以看到 PHP 错误。
然后再次运行您的代码。

【讨论】:

  • 我认为问题仅在于其余部分的单独提交,因为如果我将提交放入 functionA 插入查询运行良好...
  • 程序员永远不应该思考。但一定要知道。
  • 我根据您的建议更改了我的代码,但我得到了相同的结果。只有在提交在 functionA 中时查询才有效
  • 那么你必须确保它是同一个mysqli实例。执行var_dump($mysqli); 并检查两个变量的# 后面的数字
猜你喜欢
  • 1970-01-01
  • 2013-09-10
  • 2013-10-21
  • 2021-04-14
  • 1970-01-01
  • 2022-10-20
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
相关资源
最近更新 更多