虽说PHP是弱类型的语言,但不代表没类型,乱转也是个问题,因为要进行数据比较,判断,还要和其它语言数据交互。这个问题一定要解决的。但网上的标准答案似乎没提驱动问题,此文结合作者经验详细说明。
1、PDO连接设置
如果百度搜索"php pdo查int返回string",标准答案是:
$pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(\PDO::ATTR_STRINGIFY_FETCHES, false);
2、驱动问题不可忽略
PDO参数设置没毛病,但不一定管用 。个别同学反馈这样设置是无效的,刚好我本地环境也碰到了,运气就这么好。
参数无效时的php -i 相关驱动参数
image.png
参数有效时的php -i相关驱动参数,这里要划重点!
不管怎么安装的php,pdo的驱动相关参数长这模样就可以了。
PDO
PDO support => enabled
PDO drivers => sqlite, mysql
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.12-dev - 20150407 - \
$Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
PDO参数有效相关编译参数 -- 这是关键一步
我是习惯通过编译来安装PHP环境的,这样更可控。
正面是我编译安装的部分参数,供参考,
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc --enable-mysqlnd \
--with-pdo-mysql --with-mysqli=/usr/local/mysql/bin/mysql_config
另外分享一下我之前怎么设置都无效时的编译参数
这样编译安装pdo参数怎么设置都无效,int会转string:
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysqli=mysqlnd \
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config