PHP文件报告成功,但MySQL数据库未更新

时间:2018-08-17 08:54:31

标签: javascript php mysql post pdo

我正在尝试使用PHP文件(使用PDO)将一些数据从JavaScript程序发送到MySQL数据库。我几个月前就开始使用它,但是我不小心删除了包含用于将数据从JavaScript文件发送到PHP文件的save_data()函数的文件,但现在我无法继续工作了

这是我的save_data函数:

function save_data(expData){
    data = JSON.stringify(expData)
    $.post('./saveData.php',data,function(response){
        console.log("Response: "+response);
    })
}

这是我的PHP文件:

<?php
$pdo = new PDO("mysql:host=host;dbname=name;",'admin','p');

$data = json_decode ($_POST['json'], true);

$pdo->prepare("INSERT INTO `response` (`ip`, `complete_sequence`, `total_wins`, `key_presses`, `run_length`, `subject_condition`, `time_elapsed`, `total_answered`, `total_forfeits`, `total_losses`, `total_missed`, `total_paper`, `total_rock`, `total_scissors`, `total_ties`, `run_test_part_one`, `run_test_part_two`, `run_test_part_three`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")->execute([
$_SERVER['REMOTE_ADDR'],
$data['completeSequence'],
$data['totalWins'],
$data['key_presses'],
$data['runLength'],
implode (", ", $data['SubjectCondition']),
$data['time_elapsed'],
$data['totalAnswered'],
$data['totalForfeits'],
$data['totalLosses'],
$data['totalMissed'],
$data['totalPaper'],
$data['totalRock'],
$data['totalScissors'],
$data['totalTies'],
$data['runsTestPartOne'],
$data['runsTestPartTwo'],
$data['runsTestPartThree']
]);

echo "{'result':'success'}";

我发现奇怪的是,PHP文件在代码save_data()中运行后报告成功,但是没有新行添加到数据库中(不会更新)。

此外,自从我上次能够成功更新数据库以来,一直没有触摸过PHP文件,因此,我可以肯定问题出在save_data()上,但是我不知道这是什么。 。

我已经浏览过有关类似问题的已回答问题,但是在所有情况下,我都能发现问题是未找到具有特定条目的行,因此成功更新了0行。在这种情况下,没有在数据库中搜索任何内容,我添加了一个全新的行,因此我无法理解如果不更新数据库为什么会收到成功消息。

我是Web开发的新手,因此,我能为此提供的任何帮助将不胜感激!

更新: 我被要求显示数据从何处发送。数据从使用称为JsPsych的JavaScript库编写的HTML文件发送。实际程序本身很冗长,但是下面是存储相关数据的特定部分,并且称为save_data()

 //place data in jsPych data structure
    jsPsych.data.addDataToLastTrial({
        totalAnswered: subjectData.answered,
        totalMissed: subjectData.missed,
        totalRock: subjectData.rock,
        totalPaper: subjectData.paper,
        totalScissors: subjectData.scissor,
        completeSequence: full_sequence,
        totalWins: finalscore.wins,
        totalLosses: finalscore.losses,
        totalTies: finalscore.ties,
        totalForfeits: finalscore.forfeits,
        runLength: runLength.toString(),
        runsTestPartOne: partOneRT,
        runsTestPartTwo: partTwoRT,
        runsTestPartThree:partThreeRT,
        eventLog:event_log,
    });

    //write data to Database
    save_data(jsPsych.data.getLastTrialData());

1 个答案:

答案 0 :(得分:0)

最终出现两个问题,一个是在'json'函数中我的JSON字符串未命名为save_data(),因此当我尝试使用未初始化的变量时,PHP脚本抛出错误,因为{ {1}}不存在。更新和正确的功能是这样的:

$_POST['json']

此修复程序在第3行中,其中输入为function save_data(expData){ data = JSON.stringify(expData) $.post('./saveData.php',{json:data},function(response){ //send POST request to PHP file console.log("Response: "+response); }) } ,而不是简单的{json:data}

第二个问题是数据库本身行为异常。特别是其中一栏拒绝接受新条目,并且每当运行data时都会引发错误。通过向PHP添加try-catch块来发现此问题,以便报告数据库本身引发的任何错误。这是更新的PHP文件的相关部分:

INSERT

该问题通过简单地删除列并再次添加来解决。这是一个简单的修复程序,但是我包含了查找问题的代码,因为我发现能够查看数据库本身引发的错误很有用。

感谢所有响应所有帮助的人!