How to retrieve 'mysqli-insert_id' from within this function, in addition to the query return?

0
public function executar($sql){

    $con = new conexao();
    $con->abrir();
    $re = $con->mysqli->query($sql);

    // Preciso retornar esta informação tambem:
    $last_id = $con->mysqli->insert_id;

    $con->fechar();
    return $re;
}

function inserir($tabela,$dados){

    $arrCampo = array_keys($dados);
    $arrValores = array_values($dados);
    $numCampos = count($arrCampo);
    $numValores = count($arrValores);
    if($numCampos == $numValores){
        $SQL = "INSERT INTO " .$tabela." (";
        foreach($arrCampo as $campo){
            $SQL .= "$campo, ";
        }
        $SQL = substr_replace($SQL, ")", -2, 1);
        $SQL .= "VALUES (";
        foreach($arrValores as $valores){
            $SQL .= "'".$valores."', ";
        }
        $SQL = substr_replace($SQL, ")", -2, 1);
    }else{
        echo "Erro ao verificar campos";
    }
    $this->executar($SQL);

}

I'm using the following codes, and I need to return the ID of the last entry in the database.

$dados_cliente = array(
    'cliente_nome'=>$cliente_nome,
    'cliente_email'=>$cliente_email,
    'cliente_celular'=>$cliente_celular,
    'cliente_tipo'=>$cliente_tipo,
    'cliente_documento'=>$cliente_documento
);

$comando->inserir('clientes',$dados_cliente);

That is sent this way. However, after running the command $comando->inserir('clientes',$dados_cliente); I can not get the value of the last insertion of the bank.

    
asked by anonymous 01.02.2017 / 12:15

2 answers

1

Considering that you have the structure presented within a class:

public function executar($sql)
{

    $con = new conexao();
    $con->abrir();

    $re = $con->mysqli->query($sql);

    // Preciso retornar esta informação tambem:
    $last_id = $con->mysqli->insert_id;

    $con->fechar();

    return $re;

}

public function inserir($tabela,$dados)
{

    $arrCampo   = array_keys($dados);
    $arrValores = array_values($dados);
    $numCampos  = count($arrCampo);
    $numValores = count($arrValores);

    if($numCampos == $numValores) {

        $SQL = "INSERT INTO " .$tabela." (";
        foreach($arrCampo as $campo){
            $SQL .= "$campo, ";
        }

        $SQL = substr_replace($SQL, ")", -2, 1);

        $SQL .= "VALUES (";
        foreach($arrValores as $valores){
            $SQL .= "'".$valores."', ";
        }

        $SQL = substr_replace($SQL, ")", -2, 1);

    }else{

        echo "Erro ao verificar campos";

    }

    $this->executar($SQL);

}
  

I found that the inserir method also belongs to the same class, since there is the use of $this in your body.

You can set a property of the class named last_id and update its value within the executar method:

public function executar($sql)
{

    $con = new conexao();
    $con->abrir();

    $re = $con->mysqli->query($sql);

    // A propriedade é atualizada aqui:
    $this->last_id = $con->mysqli->insert_id;

    $con->fechar();

    return $re;

}

In this way, it will be accessible in every class. So in the inserir method you can return the value of this property.

public function inserir($tabela,$dados)
{

    $arrCampo   = array_keys($dados);
    $arrValores = array_values($dados);
    $numCampos  = count($arrCampo);
    $numValores = count($arrValores);

    if($numCampos == $numValores) {

        $SQL = "INSERT INTO " .$tabela." (";
        foreach($arrCampo as $campo){
            $SQL .= "$campo, ";
        }

        $SQL = substr_replace($SQL, ")", -2, 1);

        $SQL .= "VALUES (";
        foreach($arrValores as $valores){
            $SQL .= "'".$valores."', ";
        }

        $SQL = substr_replace($SQL, ")", -2, 1);

    }else{

        echo "Erro ao verificar campos";

    }

    $this->executar($SQL);

    return $this->last_id;

}

So when invoking the method. you will have access to the added registry id.

$dados_cliente = array(
    'cliente_nome'=>$cliente_nome,
    'cliente_email'=>$cliente_email,
    'cliente_celular'=>$cliente_celular,
    'cliente_tipo'=>$cliente_tipo,
    'cliente_documento'=>$cliente_documento
);

$last_id = $comando->inserir('clientes',$dados_cliente);

echo "ID do registro adicionado " . $last_id;

According to official ownership documentation insert_id :

  

Caution! If the last query was not an INSERT or UPDATE or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero.

    
02.02.2017 / 01:31
0

Change the return of your method to return an array.

public function executar($sql){

    $con = new conexao();
    $con->abrir();
    $re = $con->mysqli->query($sql);

    // Preciso retornar esta informação tambem:
    $last_id = $con->mysqli->insert_id;

    $con->fechar();
    return array($re, $last_id);
}

Then you can either retrieve the data for a list, or treat the array any way you like.

list ($operationResult, $lastInsertedValue) = $comando->inserir('clientes',$dados_cliente);
    
02.02.2017 / 01:29