为何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  ·  1年前

经过多次测试发现

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

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

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

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

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

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

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

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

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

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