为何Laravel默认PDO::ATTR_EMULATE_PREPARES=false

关于PDO::ATTR_EMULATE_PREPARES

一样的sql,值为true的查询速度要快于false时,然而Laravel的默认值却是false

我只查到在PHP 5.3.9之前本地模拟有BUG,可是即使Laravel 9.x的默认值仍然是默认false的,而9.x要求是PHP ^8.0,即不可能遇上当初的BUG了

我的问题:

  1. Laravel设置默认值为false的动机是什么?
  2. 如果我在配置文件里将其指定为true会有什么负面作用吗?
  3. 大家是如何配置的?
世界最好语言的追随者
附言 1  ·  2年前

经过多次测试发现

  1. 当PHP服务器性能远远好于MySQL服务器时,设为true能显著提高性能,反之亦然
  2. 当两者性能相当时设何值对性能的影响微乎其微

总结:当数据库服务器性能不够而php服务器性能冗余时推荐设置为true,否则设置为false的综合情况更好

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

默认是false就是为了保持查出的数据类型不变。设置为true,那就是项目有需求就可以,这个设置主要看项目吧。影响就是设置true后查出的数据类型都是字符了

2年前 评论
Rache1 2年前
renxiaotu (楼主) 2年前
renxiaotu (楼主) 2年前
讨论数量: 6

默认是false就是为了保持查出的数据类型不变。设置为true,那就是项目有需求就可以,这个设置主要看项目吧。影响就是设置true后查出的数据类型都是字符了

2年前 评论
Rache1 2年前
renxiaotu (楼主) 2年前
renxiaotu (楼主) 2年前

默认是false就是为了保持查出的数据类型不变。设置为true,那就是项目有需求就可以,这个设置主要看项目吧。影响就是设置true后查出的数据类型都是字符了

2年前 评论
Rache1 2年前
renxiaotu (楼主) 2年前
renxiaotu (楼主) 2年前
fatrbaby

大概是因为可以防止SQL注入。

2年前 评论
renxiaotu (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!