我正在尝试使用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());
答案 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
该问题通过简单地删除列并再次添加来解决。这是一个简单的修复程序,但是我包含了查找问题的代码,因为我发现能够查看数据库本身引发的错误很有用。
感谢所有响应所有帮助的人!