【问题标题】:ServerError 500 on updating mysql table更新 mysql 表时出现 ServerError 500
【发布时间】:2016-03-05 22:52:05
【问题描述】:

所以问题是,每当用户按下登录时,我想创建数据库中的值更改为 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 功能不能正常工作,我和我的朋友找不到解决方案,我们试图解决它,或者尝试改变它的行,但没有任何效果......

提前致谢!

【问题讨论】:

  • 我不使用 PDO,但我猜你需要在每个查询中绑定 :username 参数。服务器 500 错误让我觉得您可能将其作为 CGI 运行?
  • 你怎么称呼这个例程?阿贾克斯?错误 500 通常意味着 PHP 语法错误或者它期望的发布数据没有被正确传递。
  • 我注意到您没有bindParam(':username', $username),因此我怀疑 PDO 抛出异常是由于 SQL 语句中的参数数量与 execute() 中实际可用的参数数量不一致。
  • 没有显示任何内容,当我将错误报告和显示错误放在网站上时,甚至无法访问 login.php,但立即显示 500 错误。当我点击登录时出现错误
  • @MichaelBerkowski $stmt->bindParam(':username', $username);我补充说,仍然是错误 500

标签: php mysql server-error


【解决方案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();

但这只会让你走到一半。由于在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();

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多