我有一个问题,关于在PHP类中实现SQL查询的最佳方法是什么。我希望尽可能保持查询。
这是我的第一次尝试:
class NewsArticle
{
//attributes
private $newsArticleID;
//methodes
//constructoren
public function __construct($newsArticleID)
{
$this->newsArticleID = $newsArticleID;
}
//getters
public function getGeneralData()
{
$query = mysql_query("SELECT author, title, content, datetime, tags FROM news WHERE news_id = '$this->newsArticleID'");
$result = mysql_fetch_array($query);
$data = array(
'author' => $result['author'],
'title' => $result['title'],
'content' => $result['content'],
'datetime' => $result['datetime'],
'tags' => $result['tags']
);
return $data;
}
//setters
}
现在我想知道为generalData创建一个setter是否更好,并且我从数据库中检索的每个项目都创建一个变量并分配正确的值。然后我可以为每个变量创建一个getter。就像这样。
class NewsArticle
{
//attributen
private $newsArticleID;
private $author;
private $title;
// more variables
//methodes
//constructoren
public function __construct($newsArticleID)
{
$this->newsArticleID = $newsArticleID;
}
//getters
public function getAuthor()
{
return $this->author;
}
public function getTitle()
{
return $this->title;
}
//setters
public function setGeneralData()
{
$query = mysql_query("SELECT author, title, content, datetime, tags FROM news WHERE news_id = '$this->newsArticleID'");
$result = mysql_fetch_array($query);
$this->author = $result['author'];
$this->author = $result['author'];
//other variables
}
}
答案 0 :(得分:0)
使用setter和getter的意义在于,通过强制开发人员使用它们,您可以实现更复杂的访问机制,例如在设置值时设置标志,以便您的类知道将其写回数据库(虽然这是一个相当糟糕的例子,因为无需通过方法强制访问就可以实现目标。
顺便说一句
news_id = '$this->newsArticleID'
没有
不应引用数字(打破优化器),并且应在查询中使用它们时对字符串进行转义。
答案 1 :(得分:0)
我的建议是开始使用MySQL的PHP-PDO和存储过程。虽然在PHP代码中使用直接查询和使用存储过程(毫秒差异)时会看到一个小的时间差异,但是在php中编写代码的次数会减少。就我而言,你会有一个更平衡的应用程序。还可以使用getData和setData函数,它们应该以数组或json的形式返回你想要的任何东西(我想如果你想使用浏览器的本地存储,你会发现这非常有趣)。