关于更新mysql表的ServerError 500

时间:2016-03-05 22:52:05

标签: php mysql server-error

所以问题就是,我想创建用户按下登录时数据库中的值变为1,但每当我使用UPDATE时,我们点击登录时会得到一个servererror 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函数无法正常工作,我和我的朋友无法找到解决方法,我们试图解决它,或者尝试更改它的行,但没有任何效果......

提前致谢!

1 个答案:

答案 0 :(得分:1)

有一些问题,一旦出现错误报告,就会出现一个问题。始终在开发和测试代码时,将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();

但那只会让你在那里。由于在'1'中使用静态字符串值bindParam(),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();