2017-04-09 129 views
-1

我创建了一个PHP处理程序,从POST请求接收JSON有效内容,然后将其插入到phpMyAdmin的数据库中。我不知道为什么这不起作用。为什么我的json数据没有被插入到mySQL数据库中?

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和有它在自动递增。如果我理解正确,我不需要在该列中插入任何内容,因为它每次都会分配一个数字。或者当我插入其他变量时仍然需要传递它?

+1

停止使用mysql扩展。你的代码是为sql注入打开的。 – Bhavin

+0

好吧我会研究它。任何想法为什么它不工作,因为它是? –

+0

不需要,因为主键是自动增量。用你的错误更新你的问题。并且在代码开始时启动error_reporting(E_ALL),所以如果发生任何其他错误,我们也可以计算出来。 – Bhavin

回答

1

这适用于数组部分,你会得到正确的答案。所以,你的代码不错,但你应该检查所有的错误(正如Bhavin在评论中所述)。我很确定你有一个错字 - > $ vid_name = $ data_array ['data'] ['videName'];是不是 like $ vid_name = $ data_array ['data'] ['vide o Name']; Thereforer,使用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"; } 

?> 
+0

仍然是一个不行的....我想我可能会越来越累或什么 –

+0

@ChaceMcguyer:你试过它,是他们在运行它时会出现与我的代码一起出现的错误?如果是的话,他们是什么?编辑:**只是**代码,页面上没有其他内容,但您的参数为DB请 – OldPadawan

+0

我仍然试图找出那部分。我下载了Aptana并设置了ftp。现在,当我尝试运行代码并且甚至不显示回显时,它会一直打开Firefox。 –

0

不知道你是否有同样的问题,但是这并没有为我工作...

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

我不得不使用

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

不能使用stdClass的数组。

+0

你从哪里得到有效载荷?我应该使用$ data_array吗? –

+0

对不起,我在我的例子中使用了有效载荷机器...我做了编辑 – Vbudo

+0

嗯,仍然得到'MySQL返回一个空的结果集(即零行)(查询耗时0.0002秒)'当我查看数据库时,JSON将传递给我的处理程序这一定是问题 –

0

应该是这样更好

<?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"; 
} 

?> 

希望这有助于

+0

仍然没有在db –

+0

@ChaceMcguyer为了解正在发生什么,我更新了代码,它应该会抛出一些错误 –

+0

所以我在下面的OldPadawans代码中得到一个'Column'IpAddress'不能为空'的错误。生病给这个一个镜头。 –

相关问题