我遇到的问题是我通过函数传递的查询正在向我复制行。以前,我让PARAM_STR处理每个值,而不是语句-> execute(array())。但是,这开始给我带来麻烦。这是复制行的代码。

static public function mdlIngresarUsuario($datos){
    $statement = Conexion::conectar()->prepare("INSERT INTO usuarios (id, nombre, usuario, password, rol, estado) VALUES (null, :nombre, :usuario, :password, :rol, :estado)");
    $statement->execute(array(
        ':nombre' => $datos['nombre'],
        ':usuario' => $datos['usuario'],
        ':password' => $datos['password'],
        ':rol' => $datos['rol'],
        ':estado' => 0
    ));
    if ($statement->execute()) {
      return "ok";
    } else {
      return "error";
    }
}

最佳答案

您执行了两次语句:

$statement->execute(array(
':nombre' => $datos['nombre'],
':usuario' => $datos['usuario'],
':password' => $datos['password'],
':rol' => $datos['rol'],
':estado' => 0
));


然后在if语句的条件下:

if ($statement->execute()) {
  return "ok";
}


只需记录第一个“执行”的返回值,然后将其用作条件即可:

$success = $statement->execute(array(
':nombre' => $datos['nombre'],
':usuario' => $datos['usuario'],
':password' => $datos['password'],
':rol' => $datos['rol'],
':estado' => 0
));
if( $success ) { return "ok"; }

09-25 16:40