Trying to get a function working to create simple CRUD "Select" with multiple parameters to any table. I think I got the hardest part, but couldn't fetch the data right now. Maybe I'm doing something wrong I can't figure out.
My prepared statement function:
function prepared_query($mysqli, $sql, $params, $types = ""){
    $types = $types ?: str_repeat("s", count($params));
    if($stmt = $mysqli->prepare($sql)) { 
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    } else {
        $error = $mysqli->errno . ' ' . $mysqli->error;
        error_log($error);
    }
}
The query creator:
function create_select_query($table, $condition = "", $sort = "", $order = " ASC ", $clause = ""){
    $table = escape_mysql_identifier($table);
    $query = "SELECT * FROM ".$table;
    if(!empty($condition)){
        $query .= create_select_query_where($condition,$clause);
    }
    if(!empty($sort)){
        $query .= " ORDER BY ".$sort." $order";
    }
    return $query;
}
The helper function to create the WHERE clause:
function create_select_query_where($condition,$clause){
    $query          = " WHERE ";
    if(is_array($condition)){
        $pair       = array();
        $size       = count($condition);
        $i = 0;
        if($size > 1){
            foreach($condition as $field => $val){
                $i++;
                if($size-1 == $i){
                    $query .= $val." = ? ".$clause. " ";
                }else{
                    $query .= $val." = ? ";
                }
            }        
        }else{
            foreach($condition as $field => $val){
                $query .= $val." = ? ";
            }
        }
    }else if(is_string($condition)){
        $query .= $condition;
    }else{
        $query = "";
    }
    return $query;
}
The select function itself:
function crud_select($conn, $table, $args, $sort, $order, $clause){
    $sql = create_select_query($table, array_keys($args),$sort, $order, $clause);
    print_r($sql);
    if($stmt = prepared_query($conn, $sql, array_values($args))){
        return $stmt;
    }else{
        $errors [] = "Something weird happened...";
    } 
}
When I create the query, it seems to be OK but can't fetch the data. If I create an array with only one argument the query translates into:
SELECT * FROM `teste_table` WHERE id = ?
If I create with multiple parameters, it turns like this:
SELECT * FROM `teste_table` WHERE id = ? AND username = ?
So, how can I properly fetch the data from the select. This should be used for multiple purposes, so I could get more than one result, so the best way would be fetch data as array I guess.
I guess I'm close, but can't figure it out. Thanks
 
    