gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:40:29 27 4
gpt4 key购买 nike

我正在尝试使用 PHP 文件(使用 PDO)将一些数据从 JavaScript 程序发送到 MySQL 数据库。几个月前我已经让它工作了,但我不小心删除了包含 save_data() 函数的文件,我用来将数据从 JavaScript 文件发送到 PHP 文件,但我不能让它继续工作。

这是我的 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());

最佳答案

最终出现了两个问题,一个是我的 JSON 字符串在 save_data() 函数中没有命名为 'json',所以 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 block 发现的,这样数据库本身抛出的任何错误都会被报告。以下是更新后的 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());
}

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

感谢所有提供帮助的人!

关于javascript - PHP 文件报告成功但 MySQL 数据库未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51891737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com