我可以在 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'];
}