如何在类中使用sql查询

时间:2014-12-19 09:28:22

标签: php mysql oop

我有一个问题,关于在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
    }
}

2 个答案:

答案 0 :(得分:0)

使用setter和getter的意义在于,通过强制开发人员使用它们,您可以实现更复杂的访问机制,例如在设置值时设置标志,以便您的类知道将其写回数据库(虽然这是一个相当糟糕的例子,因为无需通过方法强制访问就可以实现目标。

顺便说一句

news_id = '$this->newsArticleID'

没有

不应引用数字(打破优化器),并且应在查询中使用它们时对字符串进行转义。

答案 1 :(得分:0)

我的建议是开始使用MySQL的PHP​​-PDO和存储过程。虽然在PHP代码中使用直接查询和使用存储过程(毫秒差异)时会看到一个小的时间差异,但是在php中编写代码的次数会减少。就我而言,你会有一个更平衡的应用程序。还可以使用getData和setData函数,它们应该以数组或json的形式返回你想要的任何东西(我想如果你想使用浏览器的本地存储,你会发现这非常有趣)。