更新时出现 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()
传递静态值。由于您不会通过更改变量值多次执行相同的语句,因此将 :username
与 bindValue()
绑定也是安全的,尽管这两种方式都适用于您的情况。
$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();
所以这个问题是,每当用户按下登录时,我想创建一个数据库中的值更改为 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()
传递静态值。由于您不会通过更改变量值多次执行相同的语句,因此将 :username
与 bindValue()
绑定也是安全的,尽管这两种方式都适用于您的情况。
$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();