MYSQL查询复制行

时间:2018-10-08 14:16:57

标签: php mysql arrays

我遇到的问题是我通过函数传递的查询正在向我复制行。以前,我让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";
    }
}

2 个答案:

答案 0 :(得分:4)

之所以发生这种情况,是因为您两次调用$statement->execute,一次是在“创建”位置,另一次是在if语句中。您应该将第一次执行的值分配给一个变量,并在if语句中使用该变量,例如:

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

答案 1 :(得分:4)

您执行了两次语句:

$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"; }