在 MySQL 数据库中使用 PHP 函数

Posted

技术标签:

【中文标题】在 MySQL 数据库中使用 PHP 函数【英文标题】:Using PHP functions with MySQL database 【发布时间】:2021-11-06 07:05:14 【问题描述】:

我有一个 php 函数,例如:

function insert_data($key, $value) 
  $stmt = $dbh->prepare('INSERT INTO table (key, value) VALUES (:key, :value)');
  $params = [
     ':key' => $key,
     ':value' => $value
  ];
  $stmt->execute($params);

然后我在我的代码中多次调用这个函数:

$name = insert_data('Name', 'Joe');
$email = insert_data('Email', 'example@example.com');

但是,我想确保如果一个事务失败,它不会提交其他所有事务。将放置 $dbh->beginTransaction();在我调用函数和 $dbh->commit();功能工作后,还是我需要做其他事情?

【问题讨论】:

作为旁注:考虑在另一个函数中准备你的语句,然后将它传递给insert_data。这是准备好的语句的一部分 - 你只需要准备一次,然后你可以用不同的参数多次运行它们。它也会保存传递给 SQL 服务器的查询。 【参考方案1】:

启用异常,如果失败则使用try/catch回滚事务。

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try 
    $dbh->beginTransaction();
    $name = insert_data('Name', 'Joe');
    $email = insert_data('Email', 'example@example.com');
    $dbh->commit();
 except (Exception $e) 
    if ($dbh->inTransaction()) 
        $dbh->rollBack();
    

【讨论】:

这并不完全适合我。因此,虽然数据库中的数据没有改变,但我不会抛出任何异常。我添加了一个回显“事务失败”;看看它是否会显示它,但它也没有。 我相信这可能是因为我的函数没有返回成功。 这不关心函数返回什么。 我在setAttribute 行中有一个错误。立即尝试。 还是不行。看起来回滚也不起作用,因为我可以插入一个,但第二个不能插入。

以上是关于在 MySQL 数据库中使用 PHP 函数的主要内容,如果未能解决你的问题,请参考以下文章

php MySQL使用rand函数随机取记录(转)

MySQL 函数在“php:7.1”docker 镜像中不可用

使用多个 php 函数查询单个(mysql)数据库的正确方法

货币的浮点精度:在 MySQL 查询 vs PHP vs Javascript 中使用“round”函数

php中mysqli函数库常用函数

使用 PHP OOP 概念连接到 MySQL 数据库