object oriented – Connect to MYSQL database in PHP with prepared statements

I have recently learned PDO. I created a db class which could do all stuff create, update, delete and select. Can Someone just review my code if this method is correct which I am doing here to connect to database using prepared statements.

<?php

class Db {

private $db_host = DB_HOST;
private $db_user = DB_USERNAME;
private $db_pass = DB_PASSWORD;
private $db_port = DB_PORT;
private $db_name = DB_DATABASE;
private $db_charset = DB_CHARSET;

private $dsn = "";
private $pdo = null;
private $stmt = null;
private $result = array();
private $conn = false;
private $options = (
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
);

public function __construct()
{
    if(!$this->conn) {
        try {
            $this->dsn = "mysql:host=" . $this->db_host . ";dbname=" . $this->db_name . ";charset=" . $this->db_charset . ";port=" . $this->db_port;
            $this->pdo = new PDO($this->dsn, $this->db_user, $this->db_pass, $this->options);
            return $this->pdo;
        } catch (PDOException $e) {
            $err = "Connection Failed: " . $e->getMessage();
        }
    }

    return false;
}

protected function select($table, $rows = "*", $join = null, $join_side = null, $where = array(), $order = null, $limit = null) {
    if($this->tableExists($table)) {
        $sql = "SELECT $rows FROM $table";
        $paramsArray_where = null;

        if($join != null && $join_side != null)
            $sql .= " $join_side $join";

        if(!empty($where)) {
            $table_val_where = ":" . implode(',:', array_keys($where));
            // Create an array of new keys that contain : in front of them
            $table_key_where = explode(",", $table_val_where);
            // get array values
            $values_where = array_values($where);
            // combine key with their respective values
            $paramsArray_where = array_combine($table_key_where, $values_where);

            $args = array();
            foreach($where as $key=>$value)
                $args() = "$key=:$key";
            
            $sql .= " WHERE " . implode(' && ', $args);
        }

        if($order != null)
            $sql .= " ORDER BY $order";

        if($limit != null)
            $sql .= " LIMIT $limit";

        $this->stmt = $this->pdo->prepare($sql);

        if($this->stmt->execute($paramsArray_where)) {
            $this->result = $this->stmt->fetchAll();
            return true;
        }
    }

    return false;
}

protected function insert($table, $params=array()) {
    if(!empty($params)) {
        if($this->tableExists($table)) {
            // Seperating $params key and values
            $table_cols = implode(',', array_keys($params));
            $table_val = ":" . implode(',:', array_keys($params));
            // Create an array of new keys that contain : in front of them
            $table_key = explode(",", $table_val);
            // get array values
            $values = array_values($params);
            // combine key with their respective values
            $paramsArray = array_combine($table_key, $values);
            
            $sql = "INSERT INTO $table ($table_cols) VALUES ($table_val)";

            $this->stmt = $this->pdo->prepare($sql);
            if($this->stmt->execute($paramsArray))
                return true;
        }
    }

    return false;
}

protected function update($table, $params=array(), $where=array()) {
    if(!empty($params)) {
        if($this->tableExists($table)) {
            $table_val = ":" . implode(',:', array_keys($params));
            // Create an array of new keys that contain : in front of them
            $table_key = explode(",", $table_val);
            // get array values
            $values = array_values($params);
            // combine key with their respective values
            $paramsArray = array_combine($table_key, $values);

            $args = array();
            foreach($params as $key=>$value)
                $args() = "$key=:$key";

            $sql = "UPDATE $table SET " . implode(', ', $args);

            if(!empty($where)) {
                
                $table_val_where = ":" . implode(',:', array_keys($where));
                // Create an array of new keys that contain : in front of them
                $table_key_where = explode(",", $table_val_where);
                // get array values
                $values_where = array_values($where);
                // combine key with their respective values
                $paramsArray_where = array_combine($table_key_where, $values_where);

                $bind_params = array_merge($paramsArray, $paramsArray_where);

                $args = array();
                foreach($where as $key=>$value)
                    $args() = "$key=:$key";
                
                $sql .= " WHERE " . implode(' && ', $args);
            }else{
                $bind_params = $paramsArray;
            }

            $this->stmt = $this->pdo->prepare($sql);
            if($this->stmt->execute($bind_params))
                return true;
        }
    }

    return false;
}

protected function delete($table, $where = array()) {
    if($this->tableExists($table)) {
        $sql = "DELETE FROM $table";
        $paramsArray_where = null;
        
        if(!empty($where)) {
            
            $table_val_where = ":" . implode(',:', array_keys($where));
            // Create an array of new keys that contain : in front of them
            $table_key_where = explode(",", $table_val_where);
            // get array values
            $values_where = array_values($where);
            // combine key with their respective values
            $paramsArray_where = array_combine($table_key_where, $values_where);

            $args = array();
            foreach($where as $key=>$value)
                $args() = "$key=:$key";
            
            $sql .= " WHERE " . implode(' && ', $args);

        }

        $this->stmt = $this->pdo->prepare($sql);
        if($this->stmt->execute($paramsArray_where))
            return true;

    }

    return false;
}

private function tableExists($table) {
    $sql = "SHOW TABLES FROM " . $this->db_name . " LIKE '$table'";
    $this->stmt = $this->pdo->query($sql);
    if($this->stmt->execute()) {
        if($this->stmt->rowCount() > 0)
            return true;
    }
    return false;
}

public function getResult() {
    $result = $this->result;
    $this->result = array();
    return $result;
}

public function __destruct()
{
    if($this->conn) {
        $this->conn = false;
        $this->pdo = null;
        $this->dsn = "";
        $this->stmt = null;
        $this->result = array();
        return true;
    }else{
        return false;
    }
}
}

I have shared whole code, Someone please review it and plz answer for any suggestions (If any).

Wanna quickly mention that I have tested the above code and it works fine.