php文件报告成功,但mysql数据库未更新

lsmepo6l  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(446)

我正在尝试使用php文件(使用pdo)将一些数据从javascript程序发送到mysql数据库。几个月前我就让它工作了,但我不小心删除了包含 save_data() 我用来将数据从javascript文件发送到php文件的函数,但我无法再让它工作了。
这是我的保存数据功能:

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行。在这种情况下,没有搜索数据库中的任何内容,我正在添加一个全新的行,因此我不明白如果数据库没有更新,为什么会收到一条成功消息。
我是一个非常新的网络开发,所以任何帮助我可以得到这将是非常感谢!
更新:我被要求显示数据的发送地。数据是从一个使用javascript库jspsych编写的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());
44u64gxh

44u64gxh1#

最后出现了两个问题,一个是我的json字符串没有命名 'json'save_data() 函数,所以当我尝试使用未初始化的变量时,php脚本抛出了一个错误 $_POST['json'] 不存在。更新和正确的功能如下:

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);
    })
}

修正在第3行,输入是 {json:data} 而不是简单的 data .
第二个问题是数据库本身的行为不正常。特别是有一列拒绝接受新条目,并在任何时候抛出错误 INSERT 他跑了。这个问题是通过在php中添加try-catch块发现的,这样就可以报告数据库本身抛出的任何错误。以下是更新后的php文件的相关部分:

<?php
try{
error_reporting(E_ALL); ini_set('display_errors', 1);
$pdo= new PDO( /*irrelevant*/);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

# irrelevant code ---------

}

catch(exception $e) {
    echo 'Exception -> ';
    var_dump($e->getMessage());
}

只需删除列并再次添加它,问题就迎刃而解了。这是一个简单的修复,但是我已经包含了查找问题的代码,因为我发现能够看到数据库本身抛出的错误非常有用。
感谢所有响应帮助的人!

相关问题