コード例 #1
0
 /**
 * DEPRECATED!
 * @param <type> $taulu tietokantataulun nimi
 * @param <type> $sarakenimitaulukko Taulukko, joka sisältää sarakenimet.
 * @param <type> $arvotaulukko Taulukko, joka sisältää vastaavat arvot.
 * HUOM! Taulukoissa pitää olla yhtä monta alkiota, muuten tulee palautetta!
 * Muutenkin käyttäjän pitää huolehtia, että sarakenimet vastaavat
 * olemassaolevaa tietokantataulua, ja että arvot ovat samassa järjestyksessä.
 *
 * Lisäksi oletetaan, että taulukon pääindeksi tuotetaan automaattisesti
 * (auto-increment), ellei sitä anneta erikseen.
 *
 * @param string $virheilmoitus mysql_query-lauseen palauttaessa falsen.
 * @return string Palauttaa arvon Tietokantaolio::$HAKU_ONNISTUI,
 * jos tallennus ok, muuten false.
 *
     function tallenna_uusi_rivi($taulu, $sarakenimitaulukko, $arvotaulukko,
                            $virheilmoitus)
     {
    $onnistu = false;
    $sarakeLkm = sizeof($sarakenimitaulukko);
    $arvoLkm = sizeof($arvotaulukko);
 
    if(!isset($sarakenimitaulukko) || !isset($arvotaulukko) ||
        ($sarakeLkm != $arvoLkm) || ($sarakeLkm == 0))
    {
        // Virheilmoitus kehittäjälle (ei käyttäjälle yl. näy):
        $onnistu = "Virhe tallennuksessa: Sarakenimi- ja arvotaulukot".
        " eivät t&auml;sm&auml;&auml;, ole m&auml;&auml;riteltyj&auml;
            tai ovat tyhji&auml;";
    }
    else
    {
        $saraketeksti = '';
        $arvoteksti = '';
        
        for($i = 0; $i < $sarakeLkm; $i++)
        {
            /* Ajatus: arvojen int-vertailu, jolloin lukujen kohdalla
             * turhat ja hidastavat hipsut '' voidaan välttää. 
             * Form-input on kuulemma aina string. Olennaista?
             *
            if($i == 0) // Pilkkujen viilausta:
            {
                $saraketeksti = $sarakenimitaulukko[$i];
                $arvoteksti = "'".$arvotaulukko[$i]."'";
            }
            else
            {
                $saraketeksti .= ", ".$sarakenimitaulukko[$i];
                $arvoteksti .= ", '".$arvotaulukko[$i]."'";                 
            }
        }
        // MYSQL:
        if($this->dbtyyppi == 'mysql')
        {
            $kyselylause = "INSERT INTO $taulu ($saraketeksti)
 							 VALUE ($arvoteksti)";
 
            $kyselyn_tila = mysql_query($kyselylause);
            
            if($kyselyn_tila == false){
                $onnistu = $virheilmoitus.
                                    " (Tietokantaolio.tallenna_uusi_rivi)";
            }
 
            else if(mysql_affected_rows() == 1)
            {
                $onnistu = Tietokantaolio::$HAKU_ONNISTUI;
            }
        }
    }
    return $onnistu;
     }
     
     /**
 * Tallentaa Mallipohjaluokasta perityn olion tietokantaan. Tämä on nykyään
 * ensisijainen tapa tallentaa tietokantaan.
 * 
 * @param Tietokantarivi $tietokantarivi Tietokantarivi-luokan olio 
 * @return string Palauttaa arvon Tietokantaolio::$HAKU_ONNISTUI,
 * jos tallennus ok, muuten arvon 
 * Tietokantaolio::$HAKUVIRHE+tietokantakyselyn (tarkoitettu vain testikäyttöön).
 * @author JP (9.5.2013)
 */
 public function tallenna_rivi($tietokantarivi)
 {
     $onnistu = Tietokantaolio::$HAKUVIRHE;
     if ($tietokantarivi instanceof Tietokantarivi) {
         $taulu = $tietokantarivi->get_taulunimi();
         if ($this->dbtyyppi == 'mysql') {
             $laskuri = 0;
             $tietokantasolut = $tietokantarivi->get_tietokantasolut();
             $sarakenimet = "(";
             $arvot = "(";
             // Id-saraketta ei oteta mukaan, koska se on aina automaattinen:
             foreach ($tietokantasolut as $solu) {
                 if ($solu instanceof Tietokantasolu && $solu->tiedot_ok() && $solu->get_sarakenimi() != Malliluokkapohja::$SARAKENIMI_ID) {
                     // Pilkut kohdalleen if-lauseen avulla.
                     if ($laskuri > 0) {
                         $arvot .= ",";
                         $sarakenimet .= ",";
                     }
                     $sarakenimet .= $solu->get_sarakenimi();
                     // Arvoissa laitetaan hipsut vain ei-lukuihin (liekö
                     // merkitystä?)
                     if ($solu->get_arvon_tyyppi() == Tietokantasolu::$luku_int) {
                         $arvot .= $solu->get_arvo();
                     } else {
                         $arvot .= "'" . $solu->get_arvo() . "'";
                     }
                     $laskuri++;
                 }
             }
             // Sulut kiinni:
             $sarakenimet .= ")";
             $arvot .= ")";
             $insert_koodi = "INSERT INTO " . $taulu . " ";
             $value_koodi = " VALUE ";
             $kyselylause = $insert_koodi . $sarakenimet . $value_koodi . $arvot;
             $kyselyn_tila = mysql_query($kyselylause);
             if ($kyselyn_tila && mysql_affected_rows() == 1) {
                 $onnistu = Tietokantaolio::$HAKU_ONNISTUI;
             } else {
                 $onnistu = Tietokantaolio::$HAKUVIRHE . "<br/>" . $kyselylause;
             }
         }
     }
     return $onnistu;
 }
コード例 #2
0
 /**
  * Tämä metodi suorittaa haun, jossa muutetaan olemassaolevan
  * tietokantataulun tietoja (paitsi id:tä ei muuteta koskaan). 
  * Parametrina annetaan muutostiedot
  * Tietokantarivi-luokan oliona, ehtotiedot
  * Tietokantasolu-luokan oliona sekä muutettavien rivien maksimilukumäärä.
  *
  * <p>
  * Palauttaa joko arvon Tietokantaolio::$HAKU_ONNISTUI tai 
  * Tietokantaolio::$HAKUVIRHE toiminnon onnistumisen mukaan.
  * </p>
  * 
  * @param Tietokantarivi $tietokantarivi
  * @param Tietokantasolu $tietokantasoluehto
  * @param int $max_muutosrivilkm Huom! Arvo Tietokantaolio::$EI_RAJOITETTU
  * antaa mahdollisuuden muuttaa mielivaltaisen määrän rivejä.
  * @return type 
  * @author Jukka-Pekka Kerkkänen 22.10.2012
  */
 public function UPDATE($tietokantarivi, $tietokantasoluehto, $max_muutosrivilkm)
 {
     $tulos = Tietokantaolio::$HAKUVIRHE;
     if ($tietokantarivi instanceof Tietokantarivi && $tietokantasoluehto instanceof Tietokantasolu && $tietokantasoluehto->tiedot_ok()) {
         $taulu = $tietokantarivi->get_taulunimi();
         $ehtosarake = $tietokantasoluehto->get_sarakenimi();
         $ehtoarvo = $tietokantasoluehto->get_arvo();
         if ($this->dbtyyppi == 'mysql') {
             $laskuri = 0;
             $set_koodi = "SET ";
             $tietokantasolut = $tietokantarivi->get_tietokantasolut();
             // Tallennetaan kaikki määritellyt solut paitsi id-sarake:
             foreach ($tietokantasolut as $solu) {
                 if ($solu instanceof Tietokantasolu && $solu->tiedot_ok() && $solu->get_sarakenimi() != Malliluokkapohja2::$SARAKENIMI_ID) {
                     // Pilkut kohdalleen if-lauseen avulla.
                     if ($laskuri == 0) {
                         if ($solu->get_arvo_on_luku()) {
                             $set_koodi .= $solu->get_sarakenimi() . "=" . $solu->get_arvo();
                         } else {
                             $set_koodi .= $solu->get_sarakenimi() . "='" . $solu->get_arvo() . "'";
                         }
                     } else {
                         if ($solu->get_arvo_on_luku()) {
                             $set_koodi .= "," . $solu->get_sarakenimi() . "=" . $solu->get_arvo();
                         } else {
                             $set_koodi .= "," . $solu->get_sarakenimi() . "='" . $solu->get_arvo() . "'";
                         }
                     }
                     $laskuri++;
                 }
             }
             if ($max_muutosrivilkm === Tietokantaolio::$EI_RAJOITETTU) {
                 $hakulause = "UPDATE {$taulu}\n                                {$set_koodi}\n                                WHERE {$ehtosarake}='{$ehtoarvo}'";
             } else {
                 $hakulause = "UPDATE {$taulu}\n                                {$set_koodi}\n                                WHERE {$ehtosarake}='{$ehtoarvo}'\n                                LIMIT {$max_muutosrivilkm}";
             }
             $tulos = mysql_query($hakulause);
             //FALSE on failure, true muutoin.
             if ($tulos) {
                 $tulos = Tietokantaolio::$HAKU_ONNISTUI;
             }
         }
     }
     return $tulos;
 }