更新当前用户信息 PHP PDO 时出现问题


Problems updating current user information PHP PDO

我目前正在开发用户配置文件系统... 我被困在用户更新其信息的阶段。 我正在检查数据库中是否已存在用户新选择的电子邮件地址。目前,我正在将他们当前的电子邮件地址回显到表单中的输入值中。

收到的验证错误阻止用户更新其其他信息,如果他们的电子邮件与数据库中已有的电子邮件相同。 任何指导将不胜感激。谢谢

$signedin = $_SESSION['username'];
function userExists($db, $email)
{
    $userQuery = "SELECT * FROM members WHERE email = '$email' and email != '$signedin'";
    $stmt = $db->prepare($userQuery);
    $stmt->execute(array(':email' => $email));
    return !!$stmt->fetch(PDO::FETCH_ASSOC);
}

$email = $_POST['email'];
$exists = userExists($db, $email);
if($exists)
{
    header("Location: memberAccount.php?action=email_In_Use");
}
else
{
    //submit form data

我从哪里开始?

  1. 您将变量直接放入查询中
  2. 不使用标记
  3. 虽然为 2,但您正在尝试将值绑定到标记

看起来你不明白PDO是怎么回事。

适合您的代码是这样的:

$userQuery = "SELECT * FROM members WHERE email = :email and email != :signedin";
$stmt = $db->prepare($userQuery);
$stmt->execute(array(':email' => $email, ':signedin' => $signedin));

我也不知道你为什么在返回时使用!!

return !!$stmt->fetch(PDO::FETCH_ASSOC);

应该只是

return $stmt->fetch(PDO::FETCH_ASSOC);

我还建议阅读准备好的陈述如何工作

好的,所以你的 userExists() 函数中的逻辑有点正确,但你已经在函数范围之外声明了 $signedin 变量,它无法访问它。此外,PDO参数设置不正确,

像这样修改你的代码,

$signedin = $_SESSION['username'];
function userExists($db, $email)
{
    global $signedin;
    $userQuery = "SELECT * FROM members WHERE email = :email and email != :signed_in";
    $stmt = $db->prepare($userQuery);
    $stmt->execute(array(':email' => $email, ':signed_in' => $signedin));
    return $stmt->fetch(PDO::FETCH_ASSOC);
}

在此处阅读有关变量作用域的更多信息:http://php.net/manual/en/language.variables.scope.php

希望这对你有帮助。