WP API以字符串而不是数字的形式返回SQL结果

时间:2017-04-15 作者:Simon H

我有这段代码,但我在浏览器中得到的是所有字段,甚至是那些在SQL中存储为Int和Bool的字段,都是字符串。

add_action( \'rest_api_init\', function () {
  register_rest_route( \'restos/v1\', \'/resto/(?P<qname>.*)\', array(
    \'methods\' => \'GET\',
    \'callback\' => \'handle_get\',
    \'permission_callback\' => function () {
      return current_user_can( \'edit_others_posts\' );
    }
  ) );
} );

function handle_get( $data ) {
    global $wpdb;
    $query = "SELECT * FROM `restaurants` WHERE `qname` = \'".$data[\'qname\']."\' LIMIT 1";
    $res = $wpdb->get_results($query)[0];

    return $res;
}
我试过了return json_encode($res) 但这没有帮助。我怎样才能得到一个json中带有数字和布尔值的对象。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

字符串输出类型应为$wpdb 查询结果中,db数据类型未映射到相应的PHP数据类型。

你必须自己照顾它,比如:

$data = [
    \'int\'    => (int)    \'123\',
    \'bool\'   => (bool)   \'1\',
    \'string\' => (string) \'abc\'
];

return rest_ensure_response( $data );
对于rest响应:

{"int":123,"bool":true,"string":"abc"}
Here\'s Matthew Boynes的一种有趣的方法,在wpdb 使用自定义包装。

请注意,您可以使用wpdb::get_row 获得一行。