为什么我的 json 数据没有被插入到 mySQL 数据库中?

Why is my json data not being INSERTed into mySQL database?

我创建了一个 PHP 处理程序来接收来自 POST 请求的 JSON 负载,然后将其插入到 phpMyAdmin 的数据库中。我不确定为什么这不起作用。

JSON:

payload = {  
    "version":"1.0",
    "event":"video_recorded",
    "data":{
        "videoName":"vs1457013120534_862",
        "audioCodec":"NellyMoser ASAO",
        "videoCodec":"H.264",
        "type":"FLV",
        "orientation":"landscape",
        "id":"0",
        "dateTime":"2016-03-03 15:51:44",
        "timeZone":"Europe/Bucharest",
        "payload":"111.111.111.11",
        "httpReferer":"http://site_from_where_video_was_recorded.com"
    }
}

我从网上教程得到的PHP代码。该教程是 2017 年的,所以我假设一切都是最新的,但它仍然不起作用:

<?php

/* db variables */

$dbhost = 'localhost';
$dbname = 'name_db';
$dbuser = 'user_db';
$dbpass = 'pass_db';

/* grab the json */

$data = $_POST['payload'];

/* put json into php associative array */

$data_array = json_decode($data);

/* store in PHP variables */

$ip_address = $data_array['data']['payload'];
$vid_name = $data_array['data']['videoName'];
$date_time = $data_array['data']['dateTime'];
$time_zone = $data_array['data']['timeZone'];

/* connect to mysql db */

$con = mysql_connect($dbuser, $dbpass, $dbhost) or die('Could not connect: ' . mysql_error());

/* select the specific db */

mysql_select_db($dbname, $con);

/* insert the values into the db */

$sql = "INSERT INTO ip_and_videos(IpAddress, VideoName, DateTime, Timezone) VALUES('$ip_address','$vid_name','$date_time','$time_zone')";

if(!mysql_query($sql,$con))
{
    die('Error : ' . mysql_error());
}

?>

我将主键设置为 int 并自动递增。如果我理解正确,我不需要在该列中插入任何内容,因为它每次都会分配一个数字。还是在INSERT其他变量的时候还需要传入?

不确定您是否有同样的问题,但这对我不起作用...

$vid_name = $data_array['data']['videName'];

我不得不使用

$vid_name = $data_array->data->videoName;

不能将 stdClass 用作数组。

这适用于数组部分,你得到正确答案。因此,您的代码还不错,但您应该检查所有错误(如 Bhavin 在评论中所述)。我很确定你打错了 -> $vid_name = $data_array['data']['videName']; 不是 像 $vid_name = $data_array['data']['videoName'];因此,error_reporting 会很有帮助,之后,如果有其他错误,请检查查询(准备语句^^)

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

$payload = '{  
          "version":"1.0",
          "event":"video_recorded",
          "data": {
              "videoName":"vs1457013120534_862",
              "audioCodec":"NellyMoser ASAO",
              "videoCodec":"H.264",
              "type":"FLV",
              "orientation":"landscape",
              "id":"0",
              "dateTime":"2016-03-03 15:51:44",
              "timeZone":"Europe/Bucharest",
              "payload":"111.111.111.11",
                "httpReferer":"http://site_from_where_video_was_recorded.com"
          }
      }';

$data_array = json_decode($payload, true);

/* store in PHP variables */

$ip_address = $data_array['data']['payload'];
$vid_name = $data_array['data']['videoName'];
$date_time = $data_array['data']['dateTime'];
$time_zone = $data_array['data']['timeZone'];

echo"[ $ip_address / $vid_name / $date_time / $time_zone ]";

// EDIT : added query

include"config.inc.php";

// connect to DB
$mysqli = mysqli_connect("$host", "$user", "$mdp", "$db");

if (mysqli_connect_errno()) { echo "Error connecting : " . mysqli_connect_error($mysqli); }

$query = " INSERT INTO ip_and_videos (`IpAddress`, `VideoName`, `DateTime`, `Timezone`) VALUES (?,?,?,?) ";
$stmt = $mysqli->prepare($query);

print_r($stmt->error_list);

$stmt->bind_param("ssss", $ip_address, $vid_name, $date_time, $time_zone );

if (!$stmt->execute()) { echo $stmt->error; } else { echo"true"; }

?>

这样应该会更好

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/* db variables */

$dbhost = 'localhost';
$dbname = 'name_db';
$dbuser = 'user_db';
$dbpass = 'pass_db';

/* grab the json */

$data = $_POST['payload'];

/* put json into php associative array */

$alldata = json_decode($data,true);
print_r($alldata);

/* connect to mysql db */

$con = mysql_connect($dbuser, $dbpass, $dbhost) or die('Could not connect: ' . mysql_error());

/* select the specific db */

mysql_select_db($dbname, $con);

/* insert the values into the db */
foreach($alldata as $data_array) {

$ip_address = $data_array['data']['payload'];
$vid_name = $data_array['data']['videoName'];
$date_time = $data_array['data']['dateTime'];
$time_zone = $data_array['data']['timeZone'];

$sql = "INSERT INTO ip_and_videos(IpAddress, VideoName, DateTime, Timezone) VALUES('".$ip_address."','".$vid_name."','".$date_time."','".$time_zone."')";
mysql_query($sql);
echo mysql_errno($con) . ": " . mysql_error($con) . "\n";
}

?>

希望对您有所帮助