在类php中加载pdo对象

时间:2011-09-30 22:07:38

标签: php pdo

我有一个文件我有我的数据库连接(PDO)。而且由于PDO是一个类(库)或者其他什么,我觉得不需要数据库类(或者我应该构建一个?)无论如何我想加载pdo对象,所以我可以在另一个类中使用这些函数,但我不知道该怎么做。

pdo_object.php

//single php db connection file here..
$dbh = ...

user.php的

class User {
    function login()
    {
        //do pdo query here...
    }
}

我是否需要在每个需要数据库连接的类上注入$dbh

1 个答案:

答案 0 :(得分:0)

  

“我不明白你的问题。在User-> login()中,只需要放置你的PDO   逻辑。“ - 我不需要在课堂上以某种方式加载dbh吗?

没有单一的衣服!如果你的类要执行逻辑(实际上是在做一个mysql_query),那么你必须提供连接处理程序。

另一方面,您的类不会执行查询,但会执行以下某些任务:构建查询,应用逻辑,检查用户提供的查询数据是否正确等等,然后无需加载处理程序导致其他班级也需要它。

我仍然相信这些问题(关于设计)是非常棘手和哲学的,一般的等等,除非它们非常具体,而你的问题不是那么多。

  

由于PDO是一个类(库)或其他什么,我觉得不需要   数据库类(或者我应该构建一个?)

在实践中,我们构建一个数据库类,而不仅仅是为了将pdo处理程序放在那里,而是因为有很多东西可以在apriori中定义并帮助你很多。 您可能拥有多个数据库处理程序(例如,一个用于公共用途和内部用于内部),您可能有自己的方法从旧项目中检查这个:

public  function getValueLike($dbh, $table,$col_name, $value )
    {     

                $col_name = '`'. $col_name . '`';
                $sql = 'SELECT '. $col_name .' FROM '. $table .' where  '. $col_name ." like ? limit 2" ;

            //prepare,execute
            $stmt =  $dbh->prepare($sql );
            $stmt->execute(array('%'.$value.'%'));

            //we want it is an array with int keys
            $stmt->setFetchMode(PDO::FETCH_NUM); 
            $tmp =   $stmt->fetchAll(); //get all values

            $res[] = $tmp[0];//get the first value
            $res[] = count($tmp);//get the count

            //return the 1st value found, also the count which at most can be 2 
            return  $res ; 
    }

所有这些东西,包括用户名,密码,数据库服务器等都不是很好的在一个地方(而不是传播),在一个易于访问的类,可以应用访问限制等。这些是一些论据证明了我的观点。

如果您决定构建一个类,那么您只需在开始时调用该类,然后只传递该对象。

  • 去MVC,选择一个好的,结构大多是预定义的,它会强迫你应用一些很酷的东西,让你成为一个更好的程序员。

  • 至于数据库处理程序,我建议你至少要使它成为单例(静态对象)并在需要时传递对象,更好的解决方案是使用注册表的非静态方式。只在某处传递注册表对象的地方,您可以访问所需的一切。如果你不能进入MVC只是尝试构建一个自定义注册表,它将节省大量的时间。 那里有很好的教程!!