gpt4 book ai didi

php - 这是在 php 中创建和使用 PDO 对象的错误/低效方法吗?

转载 作者:可可西里 更新时间:2023-11-01 08:33:37 25 4
gpt4 key购买 nike

我正在处理来自 teamtreehouse 的 PHP/MySQL 项目的示例站点...在他们的“模型”代码中,他们在名为 products.php 的文件中的函数中调用了所有数据库。这些函数中的每一个都将创建通过导入包含文件创建一个新的 PDO 对象。例如:

function get_products_recent() {

require(ROOT_PATH . "inc/database.php"); //this instantiates a new PDO object called $db

try {
$results = $db->query("
SELECT name, price, img, sku, paypal
FROM products
ORDER BY sku DESC
LIMIT 4");
} catch (Exception $e) {
echo "Data could not be retrieved from the database. get_products_recent";
exit;
}

$recent = $results->fetchAll(PDO::FETCH_ASSOC);
$recent = array_reverse($recent);

return $recent;
}

但我发现数据库查询显着减慢了页面加载速度..

经过一些谷歌搜索后,我发现 PDO::ATTR_PERSISTENT => true 属性可以添加到 PDO 构造函数中......并且已经加快了页面加载速度回到“正常”..

但是对于现实世界的场景来说,这是错误的/低效的做法吗?有没有更好的方法来打开和使用 PDO 对象,而不是在每个进行 db 调用的函数调用中创建一个新的 PDO 对象?

最佳答案

是的,你做错了。

是的,您必须在文件开头声明单个 PDO 对象并在整个应用程序中使用它。这是一个非常基本的规则,在任何情况下都必须遵守。这不是“最好的”,这是唯一可以接受的设计。

事实上,您实际上是在杀死您的数据库服务器,打开与创建 PDO 对象的次数一样多的很多 连接。连接消耗的时间并不是唯一的问题——在实时服务器上会立即达到最大连接数,使用持久连接会使情况变得更糟。

是的,您应该以其他方式命名您的问题,因为这里的人从不费心阅读问题正文,而仅根据标题来判断问题。

设置持久连接是错误的解决方案。此功能有其自身的使用原因,与纠正最初的错误设计无关。

页面加载缓慢的原因只是在每次运行查询时都创建了一个新数据库连接。就如此容易。所以 - 只创建一个 PDO 对象一次,然后将其作为参数传递(这是最方便且不太被狂热解决方案所讨厌的)。

关于php - 这是在 php 中创建和使用 PDO 对象的错误/低效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19440629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com