猿问

将 json 从 curl 存储到 mysql 表

我有一个函数可以存储用户的 IP 地址,然后curl向 3rd 方 API 发出请求,以根据 ip 凭据获取地理位置。返回数据为json格式。


问题:目前的功能有效,我可以回显返回位置


 echo $api_result['country_name']; 

我正在努力实现的是了解如何将这些值存储在我的数据库中。当我运行插入时,我的数据库状态数组中的列我已经使用了 json_decode 。


store_each_visitors_ip_address_and_jurisdiction() {

    $date = date("d/m/Y");

    $visitors_ip = $_SERVER["REMOTE_ADDR"];

    $query = query("SELECT * FROM unique_visitors WHERE 'todays_date' ='$date'");

    $result = mysqli_query($connection,$query);

    if($result->num_rows == 0) {

        $access_key = '12345678912345'; 

            $ch = curl_init('http://api.ipstack.com/'.$visitors_ip.'?access_key='.$access_key.'');

            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            $json = curl_exec($ch); curl_close($ch);

            $api_result = json_decode($json, true); 

            $api_result_two = json_decode($json, true); 

            echo $api_result['country_name']; 

            echo $api_result_two['region_name']; 

            $insert_query = query("INSERT INTO unique_visitors(todays_date, ip_address, country, region) VALUES(CURRENT_TIMESTAMP,'{$visitors_ip}','{$api_result}','{$api_result_two}') ");

            confirm($query);

    }else{

        $row = fetch_array($result);

        if(!preg_match('/'. $visitors_ip .'/i', $row['ip_address'])) {

            $newIp = $row['ip_address'] . $visitors_ip;

            $updateQuery = "UPDATE unique_visitors SET ip_address = '$newIp',

 'views' = 'views'+1 WHERE 'todays_date'= '$date'";

            mysqli_query($connection,$updateQuery);

        }

    }

}


慕斯王
浏览 165回答 1
1回答

慕妹3146593

您不能将数组存储在表中,您需要存储数组的特定元素。$insert_query = query("INSERT INTO unique_visitors(todays_date, ip_address, country, region)         VALUES(CURRENT_TIMESTAMP,'{$visitors_ip}','{$api_result['country_name']}','{$api_result['region_name']}') ");但是您应该使用准备好的语句来防止 SQL 注入。$insert_stmt = $connection->prepare("INSERT INTO unique_visitors(todays_date, ip_address, country, region)         VALUES (CURRENT_TIMESTAMP, ?, ?, ?)";$insert_stmt->bind_param("sss", $visitors_ip, $api_result['country_name'], $api_result['region_name']);$insert_stmt->execute();
随时随地看视频慕课网APP
我要回答