为何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的综合情况更好

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

默认是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年前

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