在 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 函数的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 函数在“php:7.1”docker 镜像中不可用
使用多个 php 函数查询单个(mysql)数据库的正确方法