I want to use pdo to insert some data in database with a method I created, but it is not returning the right data
I used the same code with show and select methods and worked fine, in the foreach of method base() is where the bindParam is, I used var_dump() to see what the $key and $value are returning and them are returning the right data, but when I look the database, only the last value is being inserted in all columns
protected function base($query, $params = null, $show = true)
{
    $stmt = $this->conn->prepare($query);
    // checking if there are params or if not, this part will be useless
    if (isset($params)) {
        // making a foreach to bind all parameters, the problem is here, but why?
        foreach($params as $key => $value)
            $stmt->bindParam($key, $value);
    }
    $stmt->execute();
    // checking if needs show the values (for select and show commands)
    if (isset($show)) {
        $results = json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
        return $results;
    }
}    
public function add($value = array(), $table)
{
    // turning the array key into strings for putting the columns I want to work with in pdo
    $keys = array_keys($value);
    $keystr = implode(', ', $keys);
    // getting only the values to use later
    $vlr = array_values($value);
    // making a foreach loop for make variables names uppercase and starting with an :
    $i = 0;
    foreach($keys as $key => $data)
    {
        $x[$i] = ':' . strtoupper($data);
        $i++;
    }
    $values = implode(', ', $x);
    // combining the array with variables to be binded with their values
    $bind = array_combine($x,$vlr);
    return $this->base("INSERT INTO $table ($keystr) VALUES($values)", $bind, false);
}
I'm using bindParam and then execute, but the last value is being returned in all columns, ex:
$db->add(['name' => 'some name', 'email' => 'example@mail.com'], 'users');
this should insert in the database,
name: some name,
email: example@mail.com
but it is returning
name: example@mail.com, 
email: example@mail.com
and if I change to
$db->add(['email' => 'example@mail.com','name' => 'some name'], 'users');
it returns
name: some name,
email: some name
What can be doing that?
 
    