为什么$wpdb返回MySQL整数值的字符串?

时间:2014-01-13 作者:Ярослав Рахматуллин

我发现Wordpress db接口的默认行为是转换所有整数(和float?)类型转换为字符串。

e、 g级

$wp_posts = $wpdb->get_results(\'SELECT * from wp_posts\');
$unexpected_type = gettype($wp_posts[0]->ID)  == \'string\';
请确认我的怀疑,这样做是为了支持PHP不支持的非常大(容量巨大)的整数类型,或者提供另一种解释,解释为什么会选择将整数转换为字符串。

我的问题的第二部分,正如所料,是要找出wpdb 类,该类允许请求整数类型记录的整数。

3 个回复
最合适的回答,由SO网友:Ярослав Рахматуллин 整理而成

因为PHP 5.3之前使用的MySQL接口库以字符串形式返回所有内容。如果在编译时启用,新的(可选)接口MySQL本机驱动程序可以返回整数类型。

有关详细信息,请查看libmysql和mysqlnd。

SO网友:Eric Holmes

正如其他先生们在评论中提到的,由于源代码使用的库,字符串被返回。如果需要转换为整数进行比较或函数调用,只需使用WordPress的absint 作用

$int_id = absint( $wp_posts[0]->ID );
另外,不确定DB调用是否只是一个示例,但我建议使用get_posts, 或者更好的是WP_Query 如果可能的话。这允许您维护这些功能内置的所有清理功能,从而保持站点的安全性。还请记住使用wp_reset_query 在使用上述to方法后,确保返回到主循环。

SO网友:Gaurav Gupta

如果您正在运行Ubuntu:

sudo apt-get remove php5-mysql
sudo apt-get install php5-mysqlnd
sudo service apache2 restart

结束

相关推荐

$wpdb SQL帮助。根据另外两个POST_META值选择POST ID和POST META值

我正在尝试根据其他两个帖子元值的值和自定义帖子类型选择帖子ID和帖子元值。这是我的post meta表的屏幕截图。https://www.evernote.com/shard/s40/sh/99a4c115-48bb-46c4-81ef-0df3ccd48862/3f9e2d56e7bb5db54a64782b9860ab4b/deep/0/wp_13_postmeta%20@local_wp_multisite_%20(localhost).png我需要_days meta\\u键值基于_start_d