我可以在 mysql 事务中添加查询数据库并使用其结果的函数吗?
Can I add a function that queries the database and uses its results, inside a mysql transaction?
我有这个错误:
未捕获的 PDOException:X
中没有活动事务
错误出现在交易中,因为,只有在我在其中添加了一个函数后,该函数在内部进行数据库查询,结构如下:
$conectarDB->beginTransaction();
[some queries]
$empleado = traerNombreEmpleados($codigo);
[some more queries that use $empleado]
$ok = $conectarDB->commit();
有问题的函数很简单,它唯一做的就是数据库查询和return结果:
function traerNombreEmpleados($codigo) {
date_default_timezone_set('America/Argentina/Buenos_Aires');
$conectarDB = new PDO('mysql:host='.HOST.'; dbname='.DATABASE.'; charset=utf8', USER, PASS);
$conectarDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$x = $conectarDB->prepare("SELECT nombre FROM empleados WHERE codigo = ?");
$x->bindParam(1, $codigo);
$x->execute();
$nombreItem = $x->fetch(PDO::FETCH_ASSOC);
return $nombreItem['nombre'];
}
有什么办法可以避免这个问题吗?或者我只是不需要为此使用事务?
我不确定这是否可行,但您需要 $conectarDB
来自函数内部的外部范围。
您可以尝试将其作为参数发送给函数。
date_default_timezone_set('America/Argentina/Buenos_Aires');
$conectarDB = new PDO('mysql:host='.HOST.'; dbname='.DATABASE.'; charset=utf8', USER, PASS);
$conectarDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conectarDB->beginTransaction();
[some queries]
$empleado = traerNombreEmpleados($conectarDb, $codigo);
[some more queries that use $empleado]
$ok = $conectarDB->commit();
function traerNombreEmpleados($conectarDb, $codigo) {
$x = $conectarDB->prepare("SELECT nombre FROM empleados WHERE codigo = ?");
$x->bindParam(1, $codigo);
$x->execute();
$nombreItem = $x->fetch(PDO::FETCH_ASSOC);
return $nombreItem['nombre'];
}
我有这个错误: 未捕获的 PDOException:X
中没有活动事务错误出现在交易中,因为,只有在我在其中添加了一个函数后,该函数在内部进行数据库查询,结构如下:
$conectarDB->beginTransaction();
[some queries]
$empleado = traerNombreEmpleados($codigo);
[some more queries that use $empleado]
$ok = $conectarDB->commit();
有问题的函数很简单,它唯一做的就是数据库查询和return结果:
function traerNombreEmpleados($codigo) {
date_default_timezone_set('America/Argentina/Buenos_Aires');
$conectarDB = new PDO('mysql:host='.HOST.'; dbname='.DATABASE.'; charset=utf8', USER, PASS);
$conectarDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$x = $conectarDB->prepare("SELECT nombre FROM empleados WHERE codigo = ?");
$x->bindParam(1, $codigo);
$x->execute();
$nombreItem = $x->fetch(PDO::FETCH_ASSOC);
return $nombreItem['nombre'];
}
有什么办法可以避免这个问题吗?或者我只是不需要为此使用事务?
我不确定这是否可行,但您需要 $conectarDB
来自函数内部的外部范围。
您可以尝试将其作为参数发送给函数。
date_default_timezone_set('America/Argentina/Buenos_Aires');
$conectarDB = new PDO('mysql:host='.HOST.'; dbname='.DATABASE.'; charset=utf8', USER, PASS);
$conectarDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conectarDB->beginTransaction();
[some queries]
$empleado = traerNombreEmpleados($conectarDb, $codigo);
[some more queries that use $empleado]
$ok = $conectarDB->commit();
function traerNombreEmpleados($conectarDb, $codigo) {
$x = $conectarDB->prepare("SELECT nombre FROM empleados WHERE codigo = ?");
$x->bindParam(1, $codigo);
$x->execute();
$nombreItem = $x->fetch(PDO::FETCH_ASSOC);
return $nombreItem['nombre'];
}