Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的json数据没有插入mySQL数据库?_Php_Mysql_Json_Database_Webhooks - Fatal编程技术网

Php 为什么我的json数据没有插入mySQL数据库?

Php 为什么我的json数据没有插入mySQL数据库?,php,mysql,json,database,webhooks,Php,Mysql,Json,Database,Webhooks,我创建了一个PHP处理程序,从POST请求接收JSON负载,然后将其插入phpMyAdmin中的数据库。我不知道这为什么不起作用 JSON: payload = { "version":"1.0", "event":"video_recorded", "data":{ "videoName":"vs1457013120534_862", "audioCodec":"NellyMoser ASAO", "videoCode

我创建了一个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());
}

?>

不确定您是否有相同的问题,但这不适用于我

$vid_name = $data_array['data']['videName'];
我不得不使用

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

无法将stdClass用作数组。

这适用于数组部分,您将得到正确答案。所以,您的代码不错,但您应该检查所有错误(如Bhavin在注释中所述)。我敢肯定你有一个输入错误->$vid_name=$data_数组['data']['videName'];不是像$vid_name=$data_array['data']['videoname'];因此,错误报告将非常有用,然后检查查询是否存在其他错误(准备好的语句^^)


这样应该更好

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

?>


停止使用mysql扩展。您的代码已打开以进行sql注入。好的,我将研究它。知道它为什么不能正常工作吗?不,你不必通过,因为主键是自动递增的。用你的错误更新你的问题。并且在代码开始时开始错误报告(E_ALL),这样如果出现任何其他错误,我们也可以解决它。老实说,我甚至不知道如何解决这个问题,这是php的新手。chrome上的开发工具控制台会显示错误吗?@ChaceMcguyer:请检查答案并让我们知道。。。还要注意你的查询,让它呼吸,因为你在它的各个部分->ip_和_视频(和值)之间缺少一些空格(你从哪里获得有效负载?我应该使用$data_数组吗?对不起,我在我的机器上计算的示例中使用了有效负载…我进行了编辑。嗯,仍然得到
MySQL返回了一个空的结果集(即零行)。(查询耗时0.0002秒。)
当我查看数据库时,JSON将进入我的处理程序,因此这必须是一个问题因此mysql_select_db不受欢迎在db@ChaceMcguyer为了理解发生了什么,我更新了代码,它应该会抛出一些错误,所以我得到了一个'Column'IpAddress'不能为null'下面是关于老学徒代码的错误。我试试这个。@ChaceMcguyer还应将维烯胺固定为videoName@ChaceMcguyer:你试过了吗?当你运行我的代码时,它们是否有任何错误?如果是,它们是什么?编辑:只有代码,页面上没有其他内容,只有DB的参数。我仍在尝试找出这部分。我下载了Aptana并设置了ftp。现在它继续运行当我尝试运行代码时,打开Firefox,甚至不会显示回显。当我转到我的处理程序的url时,我得到了这个消息,`Column'IpAddress'不能为null`mysql错误告诉您您的'IpAddress'列需要插入一些数据->行echo“[$ip\u address/$vid\u name/$date\u time/$time\u zone]”是否显示所有4个$vars?是否为空?(注意:在我自己的DB online中运行此脚本非常有效)不,出于某种原因,我甚至没有获取变量。我将json保存在一个有效负载变量和所有内容中。
hello[//]Array()列“IpAddress”不能为null
<?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";
}

?>