mysql_fetch_alias, mi serve un consiglio per alleggerire la funzione... :S

Sto creando la mia classe per l'astrazione al database, ma purtroppo ho alcuni problemi.

Ho già creato una classe che oggettizza le funzioni per la creazione di alcune query in PHP in sistemi OOP $query->select()->where()->limit()->execute(), ed ora sto creando il vero e proprio gestore delle query che le esegue e ritorna i dati come array.

A questo punto la query che eseguo è questa:

SELECT * FROM `site_animes` AS `Anime` LEFT JOIN `forum_users` AS `User` ON `Anime`.`user_id` = `User`.`user_id`  LEFT JOIN `site_anime_producers` AS `AnimeProducer` ON `Anime`.`producer_id` = `AnimeProducer`.`id`

Ed il risultato che mi fornisce il codice attuale è il seguente:

    [0] => Array

        (

            [Anime] => Array

                (

                    [id] => 0

                    [name] => 1

                    [user_id] => 2

                    [producer_id] => 3

                )

            [User] => Array

                (

                    [user_id] => 4

                    [user_type] => 5

                    [group_id] => 6

                    [user_permissions] => 7

                    [user_perm_from] => 8

                    [user_ip] => 9

                    [user_regdate] => 10

                    [username] => 11

                    [username_clean] => 12

                    [user_password] => 13

                    [user_passchg] => 14

                    [user_pass_convert] => 15

                    [user_email] => 16

                    [user_email_hash] => 17

                )

            [AnimeProducer] => Array

                (

                    [id] => 84

                    [name] => 85

                )

        )

    [1] => Array

        (

            [Anime] => Array

                (

                    [id] => 0

                    [name] => 1

                    [user_id] => 2

                    [producer_id] => 3

                )

            [User] => Array

                (

                    [user_id] => 4

                    [user_type] => 5

                    [group_id] => 6

                    [user_permissions] => 7

                    [user_perm_from] => 8

                    [user_ip] => 9

                    [user_regdate] => 10

                    [username] => 11

                    [username_clean] => 12

                    [user_password] => 13

                    [user_passchg] => 14

                    [user_pass_convert] => 15

                    [user_email] => 16

                    [user_email_hash] => 17

                )

            [AnimeProducer] => Array

                (

                    [id] => 84

                    [name] => 85

                )

        )

)
   /*

   // fetchAll()

   // Return all rows as array.

NOTA CHE $this->sql_object si riferisce ad una mysql_query()

   */

   function fetchAll(){

      if(!$this->sql_fetched_data){

         $result_array=array();

         $num_fields = mysql_num_fields($this->sql_object);

         $result_fields = array();

         for($idx = 0; $idx < $num_fields; $idx++){

            $field_table = mysql_field_table($this->sql_object, $idx);

            $field_name = mysql_field_name($this->sql_object, $idx);

            if(!isset($result_fields[$field_table])){ $result_fields[$field_table] = array(); }

            $result_fields[$field_table][$field_name] = $idx;

         }

         while($row=mysql_fetch_array($this->sql_object)){

            $result_row = array();

            foreach($result_fields as $key => $result_fields_row){

               $result_row[$key] = array();

               foreach($result_fields_row as $keyb => $field){

                  $result_row[$key][$keyb] = $field;

               }

            }

            $result_array[] = $result_row;

         }

         $this->sql_fetched_data = $result_array;

      }

      return $this->sql_fetched_data;

   }

Ora, il problema maggiore sta nella pesantezza del codice. Solo per eseguire quelle due query lì impiega 0.28 secondi di media, se sostituisco il mio codice con una semplice mysql_fetch_assoc scendiamo a 0.03 secondi.

La mia domanda è: Come posso alleggerire il tutto? Al limite riesco a farlo dal lato MySQL?

Ciao,

Mattia.

inviato 5 anni fa
Manzati93
X 0 X
Sto creando la mia classe per l'astrazione al database, ma purtroppo ho alcuni problemi.

Secondo me il tuo principale problema è tutto qui: stai creando la tua classe per l'astrazione al database.

Stai reinventando la ruota.

Perché non usare PDO, che ti offre un primo basilare livello di astrazione?

Se non ti accontenti, se vuoi veramente fare OOP spinta, perché non usare un ORM? Propel e Doctrine sono molto buoni e hanno livelli di complessità che, per quanto sono sicuro tu sia bravissimo, non riusciresti a raggiungere.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Ok, ho provato ad informarmi sul PDO, ma non trovo comunque una soluzione che ritorni i dati nel mio stesso formato, ho provato con PDO_FETCH_ASSOC e PDO_FETCH_OBJECT, ma come immaginavano ritornano gli stessi valori di mysql_fetch_assoc() e mysql_fetch_object()

Ciao,

Mattia.

risposto 5 anni fa
Manzati93
X 0 X
perché non usare un ORM? Propel e Doctrine sono molto buoni e hanno livelli di complessità che, per quanto sono sicuro tu sia bravissimo, non riusciresti a raggiungere.

Sono in pieno accordo! :-)

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda