Zend Framework Tutorial - 3

getNewsById

Questo metodo è molto simile al precedente. Si occupa di estrarre tutti i dati di una singola news. L'estrazione della particolare news avviene grazie al suo ID passato al metodo attraverso la variabile $newsId. Anche questa volta, recuperato l'oggetto Zend_Db_Adapter dallo Zend_Registry, si procede all'esecuzione della query ed alla lettura del record attraverso un'unica istruzione: $db->fetchRow($sql). Questa restituisce un array associativo composto da coppie nome_campo=>valore. Doverosa infine la conversione del timestamp della data con l'istruzione date();

public function getNewsById($newsId)
{
    $db = Zend_Registry::get('db');
    $sql = 'SELECT * FROM news WHERE news_id = ' . (int)$newsId;
    $row = $db->fetchRow($sql);

    if($row) {
        $row['data'] = date('j/m/y - G:i',$row['data']);
    }

    return $row;
}

Si noti come l'inserimento dell'id $newsId all'interno dell'SQL della query è stato eseguito semplicemente accodando due stringhe. L'unico accorgimento preso per evitare l'SQL injection è costituito dal casting ad intero (int) della stringa $newsId. Se invece avessimo dovuto comporre dinamicamente l'SQL, accodando una stringa al posto di un numero intero allora avremmo dovuto utilizzare i metodi quote o quoteInto:

$titolo_news = $db->quote("Notizia dell'anno");
echo $titolo_news; // 'Notizia dell\'anno'

$sql = "SELECT * FROM news WHERE titolo = $titolo_news";
echo $sql; // SELECT * FROM news WHERE titolo = 'Notizia dell\'anno'

oppure più semplicemente:

$sql = $db->quoteInto("SELECT * FROM news WHERE titolo = ?", "Notizia dell'anno");
echo $sql; // SELECT * FROM news WHERE titolo = 'Notizia dell\'anno'

Si noti il punto interrogativo utilizzato come segna posto per la sostituzione della stringa.

1 commento

1 Marco MiPnamic sabato 5 giugno 2010, ore 16:43
ma non viene spiegato come integrare il Model
Effettua l'accesso o registrati per inserire un commento