哪个选项更有效(使用PDO的数据库查询)

时间:2012-12-12 14:18:57

标签: php database pdo

我正在构建一个处理数据库操作的类,我决定使用PDO。

起初我决定使用静态方法来简化调用,因为属性不会改变且方法是独立的,所以我不需要保存对象的引用。但是,使用此解决方案,我必须为此类的某些方法的每次调用实例化一个新的PDO对象,连接到数据库,然后准备thge查询并执行。

Bellow是此类的插入mnethod的基础示例:

public static function insert($table, $columns, $values){
    $dbConnection = new PDO('mysql:dbname='.self::$db.'; host='.self::$host.'; charset=utf8', self::$login, self::$pass);

    ... create the sql query and the associative array of values

    $stmt = $dbConnection->prepare($sql);
    $stmt->execute($array_aux);
}

所以我想知道在每个调用中实例化PDO对象是否效率太低,如果我存储PDO引用是最好的,那么就不要使用静态方法。

ps:我知道有些人讨厌静态方法,因为它们很难进行单元测试,但在某些情况下它们非常方便。

1 个答案:

答案 0 :(得分:1)

举一个@ nikita2206建议的例子:

private $pdo = null;
private static function getDB(){
    if(is_null(self::$pdo)) self::$pdo = new PDO(...);
    return self::$pdo;
}
public static function insert($table, $columns, $values){
     $dbConnection  = self::getDB();
     ....
}

提醒您:您的代码,使用静态方法&像这样的变量对于mock-pdo对象变得完全不可测试......在这一点上它们并不比全局变量好得多,依赖于Dependancy Injection。