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

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

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

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

这是我的php文件:

  1. <?php
  2. $pdo = new PDO("mysql:host=host;dbname=name;",'admin','p');
  3. $data = json_decode ($_POST['json'], true);
  4. $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([
  5. $_SERVER['REMOTE_ADDR'],
  6. $data['completeSequence'],
  7. $data['totalWins'],
  8. $data['key_presses'],
  9. $data['runLength'],
  10. implode (", ", $data['SubjectCondition']),
  11. $data['time_elapsed'],
  12. $data['totalAnswered'],
  13. $data['totalForfeits'],
  14. $data['totalLosses'],
  15. $data['totalMissed'],
  16. $data['totalPaper'],
  17. $data['totalRock'],
  18. $data['totalScissors'],
  19. $data['totalTies'],
  20. $data['runsTestPartOne'],
  21. $data['runsTestPartTwo'],
  22. $data['runsTestPartThree']
  23. ]);
  24. echo "{'result':'success'}";

我觉得奇怪的是,php文件在 save_data() 在代码中运行,但没有新行添加到我的数据库(它不会更新)。
另外,自从上次成功更新数据库以来,php文件就没有被碰过,所以我很确定问题出在 save_data() ,但我不知道那是什么。
我已经查看了有关类似问题的已回答问题,但在所有情况下,我都发现问题是找不到具有特定条目的行,因此成功更新了0行。在这种情况下,没有搜索数据库中的任何内容,我正在添加一个全新的行,因此我不明白如果数据库没有更新,为什么会收到一条成功消息。
我是一个非常新的网络开发,所以任何帮助我可以得到这将是非常感谢!
更新:我被要求显示数据的发送地。数据是从一个使用javascript库jspsych编写的html文件发送的。实际的程序本身非常冗长,但这里是存储和处理相关数据的特定部分 save_data() 称为:

  1. //place data in jsPych data structure
  2. jsPsych.data.addDataToLastTrial({
  3. totalAnswered: subjectData.answered,
  4. totalMissed: subjectData.missed,
  5. totalRock: subjectData.rock,
  6. totalPaper: subjectData.paper,
  7. totalScissors: subjectData.scissor,
  8. completeSequence: full_sequence,
  9. totalWins: finalscore.wins,
  10. totalLosses: finalscore.losses,
  11. totalTies: finalscore.ties,
  12. totalForfeits: finalscore.forfeits,
  13. runLength: runLength.toString(),
  14. runsTestPartOne: partOneRT,
  15. runsTestPartTwo: partTwoRT,
  16. runsTestPartThree:partThreeRT,
  17. eventLog:event_log,
  18. });
  19. //write data to Database
  20. save_data(jsPsych.data.getLastTrialData());
44u64gxh

44u64gxh1#

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

  1. function save_data(expData){
  2. data = JSON.stringify(expData)
  3. $.post('./saveData.php',{json:data},function(response){ //send POST request to PHP file
  4. console.log("Response: "+response);
  5. })
  6. }

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

  1. <?php
  2. try{
  3. error_reporting(E_ALL); ini_set('display_errors', 1);
  4. $pdo= new PDO( /*irrelevant*/);
  5. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6. $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  7. # irrelevant code ---------
  8. }
  9. catch(exception $e) {
  10. echo 'Exception -> ';
  11. var_dump($e->getMessage());
  12. }

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

展开查看全部

相关问题