我希望你能用以下方法指导我:
我正在向wordpress REST Api发送json中的http post请求,如下所示:
{"item1":26.62,"item2":319,"item3":4445,"payload":"0a66013f115d0001088f013c05", "timestamp": "2020-06-26 19:34:31", "device": "xx"}现在,在php中,我可以将它存储在wordpress连接的mysql数据库中的一个自定义表中,如下所示:
function handle_post( WP_REST_Request $request ) {
global $wpdb;
$item = $request->get_json_params();$fields = array();
$values = array();
foreach($item as $key => $val) {
array_push($fields, preg_replace("/[^A-Za-z0-9]/", '', $key));
array_push($values, $wpdb->prepare('%f', $val));
}
$fields = implode(", ", $fields);
$values = implode(", ", $values);
$query = "INSERT INTO `tablename_xxx` ($fields) VALUES ($values)";
$list = $wpdb->get_results($query);
return $list;}
add_action( 'rest_api_init', function () { register_rest_route( 'data/v1', '/005', array( 'methods' => 'POST', 'callback' => 'handle_post', ) );} );我找到了这段代码,它可以工作,但这只是转换数字/浮动。如何继续包含包含字符串(数字和字母)的两个键值对。我该如何存储时间戳?此外,这些字符串和时间戳总是包括在内,具有值的“项目”的数量可能会有所不同。
接下来,是否可以使用其中一个对,即它的值,将其存储在(自定义)表中,并在表标题中匹配值?我能用变量吗?
谢谢你的帮助!
发布于 2020-07-01 08:46:34
$wpdb->prepare('%f', $val)只应转换数字。
数字和字符串之间应该有一些区别。例如,您预先知道要转换为数字的字段中的哪些字段,以及希望转换为字符串的字段,即使这些字段恰好是纯数字(例如,“有效载荷”可能是纯数字,但仍然希望将其保存为字符串)。
$fieldTypes = [
"item1" => '%f',
"item2" => '%f',
"item3" => '%f',
"payload" => '%s'
"timestamp" => '%s',
"device" => '%s'
];然后,在foreach循环中,而不是$wpdb->prepare('%f', $val)中,使用:$wpdb->prepare($fieldTypes[$key], $val)。
https://stackoverflow.com/questions/62640860
复制相似问题