如果我在课堂上这样做,是否可以执行sql查询?因为我确实希望在执行查询时始终使用DRY格式来执行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()');
答案 0 :(得分: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;
}
. . .
这样,第一个查询将创建连接,后续查询将发现连接仍然设置,因此它将跳过重新创建连接。