Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OO-PHP中PDO类的构造_Php_Mysql_Pdo - Fatal编程技术网

OO-PHP中PDO类的构造

OO-PHP中PDO类的构造,php,mysql,pdo,Php,Mysql,Pdo,如果在类中执行sql查询,可以吗?因为我确实希望在执行查询时使用干格式来始终使用execute prepare fetch。在PHP中谈论性能和速度可以吗 class foo{ protected function dbConnect() { $con="mysql:host=yourhost;dbname=yourdbname"; try{ $conn=new PDO($con, "user", "password"); $conn->setAtt

如果在类中执行sql查询,可以吗?因为我确实希望在执行查询时使用干格式来始终使用execute prepare fetch。在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()');

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

下面是一个例子:

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;
}

. . .

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

您是否只是询问使用类是否会影响性能?您可以使用
switch…case
而不是
if($type==“fetchColumn()”)
哦,谢谢。我忘了更改。不,使用类不会受到明显的惩罚。当遇到性能问题时,请担心它们!在此之前编写好代码。将连接句柄存储在静态变量中不是更好吗?@Bojangles,取决于您是否要创建类
foo
的多个实例,每个实例都连接到不同的数据库。这是事实,尽管最有可能的用例是多个实例指向同一数据库,因此我comment@Bojangles,如果符合应用程序的需要,则可以将DB连接存储为类的静态成员,以便在
foo
类的多个实例之间共享,从而进一步减少打开新连接的需要。