php - 将 json 从 curl 存储到 mysql 表

标签 php mysql php-curl

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

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

 echo $api_result['country_name']; 

我正在努力实现的是了解如何将这些值存储在我的数据库中。 当我运行插入时,我的数据库状态中的列 array 但我使用了 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);
        }
    }
}

最佳答案

不能在表中存储数组,需要存储数组的具体元素。

$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 注入(inject)。

$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();

关于php - 将 json 从 curl 存储到 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070239/

相关文章:

javascript - 按国家/地区代码隐藏 div

php - 转义 MySQL UPDATE(如果长度)

php - Laravel 4 迁移 :install ErrorException

php - mysql连接查询中的问题

mysql - 比较mysql中两个日期的问题

php - 使用 curl 下载一定比例的视频

php - Laravel 备份错误上传大备份到 s3

php - Apache 2.4.23 PHP7.x Windows 10 x64 php_curl 不工作

php - 来自mysql的多维数组用于数据可视化

php - 在 Wordpress 循环中展开的复选框