Zend Framework Tutorial
Interakcja z bazą danych
Ponieważ komponenty Zend Framework obsługujące bazę danych są jeszcze niestabilne, a chciałbym aby ta przykładowa aplikacja była prosta, użyłem prostej klasy która używa SQLite do dodawania i pobierania newsów oraz komentarzy:
-
<?php
-
-
class Database
-
{
-
private $_db;
-
-
public function __construct($filename)
-
{
-
$this->_db = new SQLiteDatabase($filename);
-
}
-
-
public function addComment($name, $comment, $newsId)
-
{
-
$name = sqlite_escape_string($name);
-
$comment = sqlite_escape_string($comment);
-
$newsId = sqlite_escape_string($newsId);
-
-
$sql = "INSERT
-
INTO comments (name, comment, newsId)
-
VALUES ('$name', '$comment', '$newsId')";
-
-
return $this->_db->query($sql);
-
}
-
-
public function addNews($title, $content)
-
{
-
$title = sqlite_escape_string($title);
-
$content = sqlite_escape_string($content);
-
-
$sql = "INSERT
-
INTO news (title, content)
-
VALUES ('$title', '$content')";
-
-
return $this->_db->query($sql);
-
}
-
-
public function approveNews($ids)
-
{
-
foreach ($ids as $id) {
-
$id = sqlite_escape_string($id);
-
-
$sql = "UPDATE news
-
SET approval = 'T'
-
WHERE id = '$id'";
-
-
if (!$this->_db->query($sql)) {
-
return FALSE;
-
}
-
}
-
-
return TRUE;
-
}
-
-
public function getComments($newsId)
-
{
-
$newsId = sqlite_escape_string($newsId);
-
-
$sql = "SELECT name, comment
-
FROM comments
-
WHERE newsId = '$newsId'";
-
-
if ($result = $this->_db->query($sql)) {
-
return $result->fetchAll();
-
}
-
-
return FALSE;
-
}
-
-
public function getNews($id = 'ALL')
-
{
-
$id = sqlite_escape_string($id);
-
-
switch ($id) {
-
case 'ALL':
-
$sql = "SELECT id,
-
title
-
FROM news
-
WHERE approval = 'T'";
-
break;
-
case 'NEW':
-
$sql = "SELECT *
-
FROM news
-
WHERE approval != 'T'";
-
break;
-
default:
-
$sql = "SELECT *
-
FROM news
-
WHERE id = '$id'";
-
break;
-
}
-
-
if ($result = $this->_db->query($sql)) {
-
if ($result->numRows() != 1) {
-
return $result->fetchAll();
-
} else {
-
return $result->fetch();
-
}
-
}
-
-
return FALSE;
-
}
-
}
-
-
?>
Oczywiście masz wolną rękę, aby zamiast tej klasy zastosować własne rozwiązanie. Jest ona tu dołączona tylko po to aby pokazać przykład kompletnej aplikacji.
Konstruktor tej klasy wymaga podania pełnej ścieżki i nazwy pliku bazy SQLite, który wpierw musisz stworzyć:
-
<?php
-
-
$db = new SQLiteDatabase('/path/to/db.sqlite');
-
-
$db->query("CREATE TABLE news (
-
id INTEGER PRIMARY KEY,
-
title VARCHAR(255),
-
content TEXT,
-
approval CHAR(1) DEFAULT 'F'
-
)");
-
-
$db->query("CREATE TABLE comments (
-
id INTEGER PRIMARY KEY,
-
name VARCHAR(255),
-
comment TEXT,
-
newsId INTEGER
-
)");
-
-
?>
Musisz to zrobić tylko raz, potem wystarczy że przekażesz pełną ścieżkę i nazwę pliku do konstruktora klasy Database:
-
<?php
-
-
$db = new Database('/path/to/db.sqlite');
-
-
?>



To miłe, że pofatygowałeś się z przetłumaczeniem tutoriala do Zend Framework. Czytanie tego rodzaju opracaowań jest bardziej przyjazne niż sucha lektura dokumentacji, a czytanie w rodzimym języku to wręcz luksus. Robisz fajną robotę ulatwiajac pierwszy kontakt z tym frameworkiem - mowie tu zarówno o powyższym tekscie, jak i o strone http://zf.naruniec.info/. Tak przy okazji czy to (http://framework.zend.com/developer/changeset/589) tlumaczenie tez jest Twojego autorstwa?