-2

如果我在课堂上执行 sql 查询可以吗?因为我确实想在执行查询时一直使用 DRY 格式来使用执行准备获取。在谈论 PHP 的性能和速度时可以吗?

class foo{

protected function dbConnect() 
{
    $con="mysql:host=yourhost;dbname=yourdbname";
    try{
     $conn=new PDO($con, "user", "password");
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
    }
    catch (PDOexception $e)
    {
    die ("error: ".$e->getMessage());
    }
    return $conn;
}

public function selectQuery($query,$fieldsvalues,$type)
    {
        $executequery=$this->dbConnect()->prepare($query);
        $executequery->execute($fieldsvalues);
        if($type=='fetchColumn()')
        {
            return $queryexecute->fetchColumn();
        }
        if($type=='fetch()')
        {
            return $queryexecute->fetch();
        }
        if($type=='fetchAll()')
        {
            return $queryexecute->fetchAll();
        }
    }

public function otherQuery($query,$fieldsvalues)
    {
        $queryexecute=$this->dbConnect()->prepare($query);
        $queryexecute->execute($fieldsvalues);
        return  $queryexecute->rowCount();

    }

}

$newquery=new foo();
$newquery->selectQuery("SELECT foo from bar where foobar='?'",array('baz'),'fetchColumn()');
4

1 回答 1

0

在您的示例中,损害性能的不是面向对象的类。事实上,每次运行查询时都会打开与数据库的新连接。您应该打开一次连接,并在后续查询中重用它。

这是一个例子:

class foo{

protected $dbconn = null;

protected function dbConnect() 
{
    if (!$this->dbconn) {
        $con="mysql:host=yourhost;dbname=yourdbname";
        try{
            $this->dbconn=new PDO($con, "user", "password");
            $this->dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
        }
        catch (PDOexception $e)
        {
            die ("error: ".$e->getMessage());
        }
    }
    return $this->dbconn;
}

. . .

这样,第一个查询将创建连接,随后的查询会发现连接仍然设置,因此它会跳过重新创建连接。

于 2013-06-30T06:47:29.473 回答