PHP update()MySQL数据库不工作

PHP update()MySQL数据库不工作,php,mysql,sql,database,web,Php,Mysql,Sql,Database,Web,我正在做一个测验,要求用户在最后提供人口统计信息,但我在用我收集的信息正确填充表格时遇到了一些问题 下面的代码是我的databaseAdapator.php文件的一部分。第一个,initUser(),在我的数据库中设置一个用户条目,并将所有内容初始化为0-这正在发生/我可以在MySQL中看到这些值 udpateUser()是我遇到问题的地方。调用它的页面(addUser.php)包含函数所需的所有信息,但当我调用它时,数据库中没有任何更改 基本上,我想执行以下命令: update users s

我正在做一个测验,要求用户在最后提供人口统计信息,但我在用我收集的信息正确填充表格时遇到了一些问题

下面的代码是我的databaseAdapator.php文件的一部分。第一个,initUser(),在我的数据库中设置一个用户条目,并将所有内容初始化为0-这正在发生/我可以在MySQL中看到这些值

udpateUser()是我遇到问题的地方。调用它的页面(addUser.php)包含函数所需的所有信息,但当我调用它时,数据库中没有任何更改

基本上,我想执行以下命令:

update users set age=11, gender="Male", height_cm=2 where user_id=95;
我的代码

public function initUser($age, $gender, $height, $weight, $ip){
    //create new dummy user
    $stmt = $this->DB->prepare("Insert into users values(null, :age, :gender, :height, :weight, :ip)");
    $stmt->bindParam('age', $age);
    $stmt->bindParam('gender', $gender);
    $stmt->bindParam('height', $height);
    $stmt->bindParam('weight', $weight);
    $stmt->bindParam('ip', $ip);
    $stmt->execute();

    //select last insert ID
    $stmt = $this->DB->prepare("SELECT LAST_INSERT_ID() from users");
    $stmt->execute();
    $userId = $stmt->fetch();
    return $userId[0];
}


public function updateUser($user, $age, $gender, $height, $weight){
    //edit the information for a user after demographics page
    $stmt = $this->DB->prepare("UPDATE users SET age=:age, gender=:gender, height_cm=:height, weight_kg=:weight WHERE user_id=:user");
    $stmt->bindParam('age', $age);
    $stmt->bindParam('gender', $gender);
    $stmt->bindParam('height', $height);
    $stmt->bindParam('weight', $weight);
    $stmt->bindParam('user', $user);
    $stmt->execute();

    return $user;
}
这里是addUser.php,调用函数的页面。我知道这是一种可怕的做法(对不起!),我正在尝试让数据库适配器暂时正常工作,并且我已经手动检查了所有变量——它们都有效且非空

<?php
require_once("./databaseAdaptor.php");
$user = $_GET["user"];

$age = $_POST["Age"];
$gender = $_POST["Gender"];
$height_in = $_POST['in'];
$height_ft = $_POST['ft'];
$height = 2.54 * (($height_ft * 12) + $height_in);
$weight = $_POST['lbs'];


$userId = $myDatabaseFunctions->updateUser($user, $age, $gender, $height, $weight);
?>

编辑: 这里是我调用initUser.php的地方

<?php
require_once("./databaseAdaptor.php");

$userId = $myDatabaseFunctions->initUser(0, null, 0, 0,  0);
?>

<form name='fr' action='quiz.php' method='POST'>
        <input type='hidden' name='user' value='<?=$userId?>'>
        <input type="submit" />
</form>


<script type='text/javascript'>
document.fr.submit();
</script>

食物卡路里





您在调用
updateUser()
的页面上获取的
$userId
不正确

你称之为:

$user = $_GET["user"];
但是您的表单正在使用
$\u POST
,这意味着
$user
被设置为
NULL
。这意味着在脚本执行过程中不会发生任何事情,因为查询确实成功执行了,但是没有列的
用户id
NULL
。因此,您应该通过以下方式进行呼叫:

$user = $_POST["user"];
这将使它与通过您的表单提交的内容相等


故障排除 你似乎还有些问题。以下是一些建议:

以不同的方式使用PDO。尝试通过
execute()
传递所有变量,并包括
”;
public function updateUser($user, $age, $gender, $height, $weight){
    $stmt = $this->DB->prepare("UPDATE users SET age=?, gender=?, height_cm=?, weight_kg=? WHERE user_id=?");

    $variables = [$age, $gender, $height, $weight, $user];
    echo "<pre>".print_r($variables, true)."</pre>";

    $stmt->execute($variables);
    return $user;
}
$stmt->execute($variables); 返回$user; }
尝试检查是否可以显示调用
initUser()的代码
?当然,我会把它放到主帖子中。发生了什么事情……捕捉错误可能有助于说明这是什么。我遇到的部分问题是,由于重定向到人口统计页面,用户没有正确地从测验页面发布,所以它被移动到URL中的一个参数。@JFinder
updateUser()
函数实际返回?你能回显并告诉我吗?@JFinder另外,你能告诉我你是如何实际访问
addUser.php
?以我看到的形式转到
quick.php
。不幸的是,updateUser()根本没有返回,这就是我被卡住的地方。其余信息已添加到原始帖子中。@JFinder表示未设置
$user
,表示
$\u GET['user']
无效。