【问题标题】:how to put json array into database via for or while?如何通过for或while将json数组放入数据库?
【发布时间】:2021-02-08 20:54:42
【问题描述】:

我正在从 FACEIT 平台使用 Webhook,我得到了类似的东西

stdClass Object
(
    [transaction_id] => dfba5d34-39ff-4caf-bd16-fcca57260a76
    [event] => match_status_ready
    [event_id] => 313d9c29-4c71-4275-adc5-8cd4111f08a6
    [third_party_id] => 48b264cb-e604-405c-a24f-34a550304790
    [app_id] => e3f16440-0c96-4869-9f89-78c1753a9ff5
    [timestamp] => 2021-02-08T20:50:34Z
    [retry_count] => 2
    [version] => 1
    [payload] => stdClass Object
        (
            [id] => 1-e383d04b-28d7-4e6d-b72a-2b8c08c8e8bf
            [organizer_id] => edc12227-3b07-4c5e-9325-f223025628f3
            [region] => EU
            [game] => csgo
            [version] => 16
            [entity] => stdClass Object
                (
                    [id] => ada458d4-34c4-47ab-84a1-1ab87626c829
                    [name] => ECL Division 2
                    [type] => hub
                )

            [teams] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => d5597dd7-a5db-4602-b411-ceea05451002
                            [name] => team_-finn
                            [type] => 
                            [avatar] => https://assets.faceit-cdn.net/avatars/d5597dd7-a5db-4602-b411-ceea05451002_1591229111372.jpg
                            [leader_id] => d5597dd7-a5db-4602-b411-ceea05451002
                            [co_leader_id] => 
                            [roster] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [id] => 3da45845-3733-4b69-9b69-c25ea2181c4a
                                            [nickname] => Bolitho
                                            [avatar] => https://assets.faceit-cdn.net/avatars/3da45845-3733-4b69-9b69-c25ea2181c4a_1606685453491.jpg
                                            [game_id] => 76561198178207317
                                            [game_name] => C. Bolitho
                                            [game_skill_level] => 8
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [1] => stdClass Object
                                        (
                                            [id] => f3b13a97-f287-4fef-9d1b-2b06e6a7c184
                                            [nickname] => Kronos
                                            [avatar] => https://assets.faceit-cdn.net/avatars/f3b13a97-f287-4fef-9d1b-2b06e6a7c184_1611088029728.jpg
                                            [game_id] => 76561198064664568
                                            [game_name] => Brawlhalla > CS
                                            [game_skill_level] => 8
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [2] => stdClass Object
                                        (
                                            [id] => 02df4fd6-e47e-44e1-bf35-1e4bb54becfb
                                            [nickname] => 180_Headshot
                                            [avatar] => https://assets.faceit-cdn.net/avatars/02df4fd6-e47e-44e1-bf35-1e4bb54becfb_1611591673793.jpg
                                            [game_id] => 76561198263064464
                                            [game_name] => 76561198263064464
                                            [game_skill_level] => 7
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [3] => stdClass Object
                                        (
                                            [id] => d5597dd7-a5db-4602-b411-ceea05451002
                                            [nickname] => -finn
                                            [avatar] => https://assets.faceit-cdn.net/avatars/d5597dd7-a5db-4602-b411-ceea05451002_1591229111372.jpg
                                            [game_id] => 76561198284594110
                                            [game_name] => finn
                                            [game_skill_level] => 6
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [4] => stdClass Object
                                        (
                                            [id] => cd20ef72-3a7d-40df-9102-1480a591866f
                                            [nickname] => -jonas_
                                            [avatar] => https://assets.faceit-cdn.net/avatars/cd20ef72-3a7d-40df-9102-1480a591866f_1608470890103.jpg
                                            [game_id] => 76561198316676876
                                            [game_name] => j0nas21
                                            [game_skill_level] => 5
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                )

                            [substitutions] => 0
                            [substitutes] => 
                        )

                    [1] => stdClass Object
                        (
                            [id] => 5cc910f4-c71b-48ab-9733-4efc7917153c
                            [name] => team_LUKR-
                            [type] => 
                            [avatar] => https://assets.faceit-cdn.net/avatars/5cc910f4-c71b-48ab-9733-4efc7917153c_1611317469316.jpg
                            [leader_id] => 5cc910f4-c71b-48ab-9733-4efc7917153c
                            [co_leader_id] => 
                            [roster] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [id] => 5e0822a6-7cac-43d3-8e11-4846f09e0718
                                            [nickname] => flunke_
                                            [avatar] => https://assets.faceit-cdn.net/avatars/5e0822a6-7cac-43d3-8e11-4846f09e0718_1591995725180.jpg
                                            [game_id] => 76561198060789527
                                            [game_name] => flunke
                                            [game_skill_level] => 7
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [1] => stdClass Object
                                        (
                                            [id] => 55910238-2a72-4642-aa0d-5b14870fb2d5
                                            [nickname] => zkunky
                                            [avatar] => https://assets.faceit-cdn.net/avatars/55910238-2a72-4642-aa0d-5b14870fb2d5_1608502753847.jpg
                                            [game_id] => 76561198078177475
                                            [game_name] => winch
                                            [game_skill_level] => 5
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [2] => stdClass Object
                                        (
                                            [id] => 5cc910f4-c71b-48ab-9733-4efc7917153c
                                            [nickname] => LUKR-
                                            [avatar] => https://assets.faceit-cdn.net/avatars/5cc910f4-c71b-48ab-9733-4efc7917153c_1611317469316.jpg
                                            [game_id] => 76561198031152268
                                            [game_name] => lukr
                                            [game_skill_level] => 7
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [3] => stdClass Object
                                        (
                                            [id] => 030ca481-1369-4393-b928-dd984dbb311c
                                            [nickname] => tomasinio
                                            [avatar] => https://assets.faceit-cdn.net/avatars/030ca481-1369-4393-b928-dd984dbb311c_1612353173993.jpg
                                            [game_id] => 76561198346093855
                                            [game_name] => tomasinio
                                            [game_skill_level] => 5
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                    [4] => stdClass Object
                                        (
                                            [id] => 439b5a1c-dd69-49cd-bb3c-d2b47cfe7b14
                                            [nickname] => NARUTA0
                                            [avatar] => https://assets.faceit-cdn.net/avatars/439b5a1c-dd69-49cd-bb3c-d2b47cfe7b14_1612758081953.jpg
                                            [game_id] => 76561198118696706
                                            [game_name] => ² cs.money
                                            [game_skill_level] => 8
                                            [membership] => 
                                            [anticheat_required] => 1
                                        )

                                )

                            [substitutions] => 0
                            [substitutes] => 
                        )

                )

            [created_at] => 2021-02-08T20:47:16Z
            [updated_at] => 2021-02-08T20:50:33Z
        )

)

如果具有 id 的玩家在该游戏中,我正在尝试将数据库行“游戏”更新为 1

所以我尝试了这个,我没有收到任何错误,但是我的游戏行没有更新。

<?php
include "connect_db.php";
header('Content-Type: application/json');
$request = file_get_contents('php://input');
$data = json_decode($request);

if(!empty($data)){
    $req_dump = print_r($data, true);
    $fp = file_put_contents('request.log', $req_dump);
    if($data->event == 'match_status_ready')
    {
            for($i=0; $i<count($data->payload->teams); $i++){
                for($j=0; $j<count($data->payload->teams[$i]->roster); $j++){
                    $sqlupdate[$j] = "UPDATE Korisnici SET Game='1' WHERE faceit_playerid =".$data->payload->teams[$i]->roster[$j]->id;
                    $conn->query($sqlupdate[$j]);
                    /*$message = "Tim[". $i ."] Igrač[". $j ."] - ". $data->payload->teams[$i]->roster[$j]->id ."\n";
                    file_put_contents('status.log', $message, FILE_APPEND);*/
                }
            }
            $curl = curl_init("discord-webhook-url");
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(array("content" => "!matchid ". $data->payload->id ." ".$data->event)));
            echo curl_exec($curl);   
    }
    
    else if($data->event == 'match_status_finished' || $data->event == 'match_status_cancelled')
    {
            for($i=0; $i<count($data->payload->teams); $i++){
                for($j=0; $j<count($data->payload->teams[$i]->roster); $j++){
                    $sqlupdate = "UPDATE Korisnici SET Game='0' WHERE faceit_playerid =".$data->payload->teams[$i]->roster[$j]->id;
                    $conn->query($sqlupdate);
                }
            }
        $curl = curl_init("discord-webhook-url");
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(array("content" => "!matchid ". $data->payload->id ." ".$data->event)));
        echo curl_exec($curl);
    }
    sleep(3);
}
else { echo "Link je prazan !"; }
?>

当我将它放入日志时,我得到了正确的结果

Tim[0] Igrač[0] - c8d41fb0-df78-4b53-a1ef-1b007f7d8f7b
Tim[0] Igrač[1] - edfeb779-89e7-485d-bbc8-64d99e3356ba
Tim[0] Igrač[2] - 13144f2a-e8b3-4469-816c-9af61caedb58
Tim[0] Igrač[3] - 268b7ac8-48dc-4bcf-995a-de00244e8cf7
Tim[0] Igrač[4] - ab056dc5-3cab-4568-9d2e-ddb405904500
Tim[1] Igrač[0] - 7196b459-4b4c-4a1b-8f46-9bb37a243c65
Tim[1] Igrač[1] - d8fe30bb-2a72-4169-9d30-1a6c82c6d0af
Tim[1] Igrač[2] - 7b4d7693-3646-4010-931c-e6f7c2790206
Tim[1] Igrač[3] - 4f789940-e122-4470-9347-82f21611132e
Tim[1] Igrač[4] - 4ccc9f0f-3536-4a1d-8386-a630cf2be337

谁能帮帮我?我真的很失望......

【问题讨论】:

标签: php mysql json


【解决方案1】:

谢谢先生,我终于用别的方法搞定了,可以吗?

$stmt = $conn->prepare("UPDATE Korisnici SET Game='1' WHERE faceit_playerid=?");
        $stmt->bind_param('s', $faceitid);
        foreach ($data->payload->teams as $team){
            foreach ($team->roster as $player){
                /*$sqlupdate = "UPDATE Korisnici SET Game='1' WHERE faceit_playerid=" . $player->id;
                $conn->query($sqlupdate);*/
                $faceitid = $player->id;
                $stmt->execute();
            }
        }
        $stmt->close();

编辑:我怎样才能绕过太多的连接?

【讨论】:

    【解决方案2】:

    尝试记录 SQL 查询,而不是记录值。这应该可以帮助您了解您实际上是在告诉 DBMS 做什么。您可能会发现您发送的值错误。

    另外,不要使用几个数字 for 循环,试试这个:

    foreach ($data->payload->teams as $team){
        foreach ($team->roster as $player){
            $sqlupdate = "UPDATE Korisnici SET Game='1' WHERE faceit_playerid =" . $player->id;
            $conn->query($sqlupdate);
        }
    }
    

    【讨论】:

    • 确保在定义变量后使用bind_param。 $faceitid = $player->id;然后 $stmt->bind_param('s', $faceitid);然后 $stmt->execute();
    猜你喜欢
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多