Questa funzione inoltre è sbagliata
Codice PHP:
   public function num_rows($sql) {
        
$result $this->execute($sql);

        return 
$result->num_rows;
    } 
Poichè se il query $sql fosse formalmente sbagliato, il risultato di execut sarebbe FALSE (per come hai scritto execute all'inizio del post) e su un valore FALSE non puoi usare l'istruzione $result->num_rows;
La funzione corretta sarebbe
Codice PHP:
   public function num_rows($sql) {
        
$result $this->execute($sql);
        if ( 
$result ) {
          return 
$result->num_rows;
        } else {
          return 
0// oppure false
        
}
    }