这是我到目前为止所读到的PDO::ATTR_EMULATE_PREPARES:
我不知道这些陈述是多么真实.选择MySQL接口时我最担心的是阻止SQL注入.第二个问题是表现.
我的应用程序目前使用过程MySQLi(没有预处理语句),并且使用了很多查询缓存.它很少会在单个请求中重复使用预准备语句.我开始转向PDO以获取已准备好的语句的命名参数和安全性.
我正在使用MySQL 5.1.61和PHP 5.3.2
我应该PDO::ATTR_EMULATE_PREPARES启用还是不启用?有没有办法既具有查询缓存的性能又具有预准备语句的安全性?
我已经在Stack Overflow上重复了几次这个问题,但是没有一个能够充分探索这个问题(或者至少以一种对我有帮助的方式)
问题是数据库查询应该在PHP中为整数列返回整数数据类型.相反,查询将每列作为字符串类型返回.
我确保"PDO :: ATTR_STRINGIFY_FETCHES"为false,以确保结果不会被转换为字符串.
我见过的答案:
根据我的研究,我了解这是一个驱动程序实现问题.
许多消息来源声称MySQL本机驱动程序不支持返回数字类型.这似乎不正确,因为它适用于Mac OS X.除非他们的意思是" Linux上的MySQL本机驱动程序不支持该功能".
这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处.我一直在尝试识别差异以便应用修复,但我受限于我对如何检查这些内容的了解.
php -i
PDO_MYSQL
用于MySQL的PDO驱动程序=>已启用客户端API版本=> 5.1.72
php -i
PDO_MYSQL
用于MySQL的PDO驱动程序=>启用客户端API版本=> mysqlnd 5.0.10 - 20111026 - $ Id:e707c415db32080b3752b232487a435ee0372157 $
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS …Run Code Online (Sandbox Code Playgroud) 当您获取时,PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组,即使列的 SQL 类型本应是数字类型(例如 int 或 float)。我设法解决了这个问题,但我想了解为什么它们一开始就这样设计。是不是因为PDO本身不支持(或者之前不支持)?