Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Potreste spiegarmi cosa fà questa funzione???

    Salve ho bisogno di aiuto ho capito che serve per fare le insert in un database ma non riesco a capire a cosa servi il ciclo foreach, attendo una vostra risposta grazie dell'attenzione.









    $i=0;
    $values='';
    $fields='';
    foreach ($object as $key=>$value) {
    if (!($this->_auto_increment && $key == $this->_key) && substr($key, 0, 1)!='_') {
    if ($i==0) {
    $fields.='`'.$key.'`';
    $values.='\''.$value.'\'';
    } else {
    $fields.=', `'.$key.'`';
    $values.=', \''.$value.'\'';
    }
    $i++;
    }
    }
    $query='INSERT INTO '.$this->_table.' ('.$fields.') VALUES ('.$values.')';
    $return = $this->query($query);
    if ($this->_auto_increment) {
    $query='SELECT LAST_INSERT_ID() AS `id`';
    $this->query($query);
    $result=$this->getResult();
    return $result['id'];
    } else {
    return $return;
    }

  2. #2
    Anche se fa parte sicuramente di qualcosa di più grosso, in pratica cicla i valori contenuti dentro $object (del tipo ['testo']='testo di prova') e li inserisce dentro delle variabili.

    Poi prende queste variabili e crea la query!

  3. #3
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    giusto......in pratica scorre la matrice $object recuperando le coppie chiave /valore.
    la chiave($key) identifica un campo del Db ,il valore($value) il rispettivo valore.
    Poi non fa altro che attribuire i rispettivi valori delle coppie a variabili inizializzate prima del ciclo($fields e $value) utili a completare la query Insert.
    La matrice $object naturalmente è stata riempita antecedentemente ,ma qui non si vede...
    ......e tutto questo mi sembra un tentativo di astrazione database......

  4. #4
    come si diceva prima è una specie di astrazione di un database, cmq questa sarebbe piu corretta, ma io non riesco a capire cosa serve il ciclo, se fosse un array allora si ma poi come funziorebbe la query?

    ed un altra cosa ma qui $fields.='`'.$key.'`'; il carettere fra i 2 apici è un apice giusto?? e come si fà??





    public function scrivi($object) {
    $i=0;
    $values='';
    $fields='';
    foreach ($object as $key=>$value) {
    if (!($this->_auto_increment && $key == $this->_key) && substr($key, 0, 1)!='_') {
    if ($i==0) {
    $fields.='`'.$key.'`';
    $values.='\''.$value.'\'';
    } else {
    $fields.=', `'.$key.'`';
    $values.=', \''.$value.'\'';
    }
    $i++;
    }
    }
    $query='INSERT INTO '.$this->_table.' ('.$fields.') VALUES ('.$values.')';
    $return = $this->query($query);
    if ($this->_auto_increment) {
    $query='SELECT LAST_INSERT_ID() AS `id`';
    $this->query($query);
    $result=$this->getResult();
    return $result['id'];
    } else {
    return $return;
    }

  5. #5
    Inoltre se possibile cosa restituisce la return? e poi perchè devo restituire un particolare valore quando l'obbiettivo e solo quello di inserire un oggetto nel database?




    if ($this->_auto_increment) {
    $query='SELECT LAST_INSERT_ID() AS `id`';
    $this->query($query);
    $result=$this->getResult();
    return $result['id'];
    } else {
    return $return;

  6. #6
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    ... uno dei metodi preferiti per accedere ad una matrice e recuperarne i valori è quello di usare foreach.Il ciclo foreach non include la query...infatti la query è all'esterno del ciclo.Quest'ultimo ti serve solo a recuperare valori presenti in $object....e nient'altro!
    se non recuperassi quei valori come eseguiresti la query?

    // se soddisfa la condizione di auto increment
    if ($this->_auto_increment) {
    //preleva l'ultimo id inserito...Operazione molto comune per successive operazioni su database(quantità di record inseriti,contatori etc)
    $query='SELECT LAST_INSERT_ID() AS `id`';
    $this->query($query);
    //preleva il risultato con il metodo getResult();
    $result=$this->getResult();
    // e lo restituisce;
    return $result['id'];}
    //altrimenti non fa altro che restituire l'esecuzione della query(la esegue)
    else { return $return;
    Cmq come diceva samleo c'è qualcosa di più dietro a questa funzione,perchè si fa riferimento a metodi qui non visibili di una classe preistanziata.Bisogna studiare la classe operativa per capire come si comporta,quali sono i metodi e come lavorano tra di loro,se è una classe capostipite o child.... altrimenti come si fa?Io sono andato a senso perchè più o meno è una situazione molto comune quando si lavora con alcuni famosi framework che fanno uso di astrazione database.
    Ti consiglio prima di addentrarti nella cosa di farti una ripassati sulla programmazione ad oggetti...se non altro ti tornerà molto utile...nel proseguire lo studio del codice.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.