【问题标题】:How to insert json to mysql database wp / php - numbers, strings and timestamp如何将 json 插入 mysql 数据库 wp/php - 数字、字符串和时间戳
【发布时间】:2020-10-19 18:39:54
【问题描述】:

希望您能指导我以下内容:

我正在向 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', ) );} );

我找到了这段代码,它可以工作,但这只是转换数字/浮点数。我应该如何继续包含包含字符串(数字和字母)的两个键值对。以及如何存储时间戳?此外,始终包含这些字符串和时间戳,具有值的“项目”的数量可能不同。

接下来,是否可以使用其中一对,即它的值,将其存储在(自定义)表中,并在表标题中匹配值?我可以以某种方式使用变量吗?

感谢您的帮助!

【问题讨论】:

    标签: php mysql json wordpress rest


    【解决方案1】:

    $wpdb->prepare('%f', $val) 应该只转换数字。

    数字和字符串之间应该有一些区别。例如,您提前知道要转换为数字的字段以及要转换为字符串的字段即使它恰好是纯数字(例如,“有效载荷”可能是纯数字,但您仍想将其保存为字符串)。

    $fieldTypes = [
        "item1"     => '%f',
        "item2"     => '%f',
        "item3"     => '%f',
        "payload"   => '%s'
        "timestamp" => '%s',
        "device"    => '%s'
    ];
    

    然后,在 foreach 循环内,使用:$wpdb->prepare($fieldTypes[$key], $val),而不是 $wpdb->prepare('%f', $val)

    【讨论】:

    • 感谢您的解决方案!
    • 您也可以将答案标记为“已接受”,以便有类似问题的人看到。
    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 2016-03-06
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2021-11-29
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多