更新时出现 ServerError 500 mysql table

ServerError 500 on updating mysql table

所以这个问题是,每当用户按下登录时,我想创建一个数据库中的值更改为 1,但是每当我使用更新时,我们都会在单击登录时得到服务器错误 500

<?php
require("inc/db.php");
ini_set('error_reporting', 0);
ini_set('display_errors', 0);

session_start();

if(isset($_POST['submit'])){
  $errMsg = '';
  //username and password sent from Form
  $username = trim($_POST['username']);
  $password = trim($_POST['password']);

  if($username == '')
    $errMsg .= 'You must enter your Username<br>';

  if($password == '')
    $errMsg .= 'You must enter your Password<br>';


  if($errMsg == ''){
    $records = $conn->prepare('SELECT id,username,password,email,bday,points,uid FROM  users WHERE username = :username AND password = :password');
    $records->bindParam(':username', $username) ;
    $records->bindParam(':password', $password) ;
    $records->execute();
    $results = $records->fetch(PDO::FETCH_ASSOC);

    if($results > 0){

      $sql = "UPDATE users SET isloggedin = :isloggedin WHERE username = :username";
      $stmt = $conn->prepare($sql);
      $stmt->bindParam(':isloggedin', '1');
      $stmt->execute();


      $_SESSION['username'] = $results['username'];
      $_SESSION['id'] = $results['id'];
      $_SESSION['points'] = $results['points'];
      $_SESSION['uid'] = $results['uid'];





      header('location:dashboard.php');
    }else{
      $errMsg .= 'Username and Password are not found<br>';
    }
  }
}
?>

因此,UPDATE 功能无法正常工作,我和我的朋友找不到解决方案,我们尝试解决它,或者尝试为其更改线路,但没有任何效果...

提前致谢!

存在一些问题,一旦出现错误报告,这些问题就会一次出现一个。始终在开发和测试代码时,将 error_reporting 一直设置到 E_ALL 并使用 ini_set('display_errors', 1) 启用显示错误。这些将一起在屏幕上为您详细说明 500 错误,使其立即变得更加明显。

我发现的第一个问题是您的 UPDATE 语句有两个参数 :isloggedin, :username,但只有第一个参数与 bindParam() 绑定。您还必须绑定第二个,因为 PDO 正在抛出与无效参数编号相关的异常。

  $sql = "UPDATE users SET isloggedin = :isloggedin WHERE username = :username";
  $stmt = $conn->prepare($sql);
  $stmt->bindParam(':isloggedin', '1');
  $stmt->bindParam(':username', $username);
  $stmt->execute();

但这只会让你走到一半。由于在 bindParam() 中使用静态字符串值 '1',PDO 将下一个错误,它只接受变量作为其第二个参数(因为它通过引用使用它们)。另一种方法是使用 bindValue() 传递静态值。由于您不会通过更改变量值多次执行相同的语句,因此将 :usernamebindValue() 绑定也是安全的,尽管这两种方式都适用于您的情况。

  $sql = "UPDATE users SET isloggedin = :isloggedin WHERE username = :username";
  $stmt = $conn->prepare($sql);
  // Make sure static values are bound by value
  $stmt->bindValue(':isloggedin', '1');
  $stmt->bindValue(':username', $username);
  $stmt->execute();