脚本中有多个PDO实例?

时间:2011-11-05 14:48:47

标签: php mysql pdo

我有一个关于使用PDO的“最佳实践”问题。我正在努力最终进入面向对象的开发,远离我十年前开发的PHP习惯。

我的常规开发方法是在脚本/页面的开头打开数据库连接,然后根据需要进行一系列mysql_query调用(主要是SELECTINSERT) 。我第一次使用PDO,看起来这里的做法是为每个查询/事务创建不同的PDO对象。这些似乎会在字符串期间创建到同一个DB的多个连接,这似乎是很多不必要的开销。

我读完这个完全错了吗?

如果我错过了某个地方,我会道歉。我确实通过StackOverflow,php.net和我有的PHP 5.3书。

3 个答案:

答案 0 :(得分:2)

不,在这种情况下,您不应该创建多个PDO实例。只需创建1个实例并在其上使用PDO::query()即可。例如:

$pdo = new PDO(...);

/* ... */

$pdo->query("SELECT * FROM table1");

/* ... */

$pdo->query("SELECT * FROM table2");

/* ... etc ... */

如果查询包含参数,则更喜欢使用PDO::prepare()PDOStatement::execute()而不是PDO::query()。您可以在PDO::prepare()的{​​{3}}中找到一个示例。

答案 1 :(得分:2)

PDO对象存储执行查询的连接。通常情况下,您只需要其中一个。

虽然有些情况下2个连接可能很方便(例如,当连接到完全不同的数据库时),通常只需要一个PDO类的实例。

PDOStatement类将包含多个实例。哪个存储查询语句本身(以及结果)。因此,对于每个查询,您将拥有一个PDOStatement实例。

答案 2 :(得分:0)

是的,您最初通过创建PDO对象的实例来连接到数据库。但是您使用此对象来运行查询,并将结果打包到另一个类中。

因此,您主要有几个包含查询结果的类,但只有一个连接到运行查询的数据库。