我有一个关于使用PDO的“最佳实践”问题。我正在努力最终进入面向对象的开发,远离我十年前开发的PHP习惯。
我的常规开发方法是在脚本/页面的开头打开数据库连接,然后根据需要进行一系列mysql_query
调用(主要是SELECT
和INSERT
) 。我第一次使用PDO,看起来这里的做法是为每个查询/事务创建不同的PDO对象。这些似乎会在字符串期间创建到同一个DB的多个连接,这似乎是很多不必要的开销。
我读完这个完全错了吗?
如果我错过了某个地方,我会道歉。我确实通过StackOverflow,php.net和我有的PHP 5.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对象的实例来连接到数据库。但是您使用此对象来运行查询,并将结果打包到另一个类中。
因此,您主要有几个包含查询结果的类,但只有一个连接到运行查询的数据库。