我的 PDO 语句中的错误


error in my pdo statement

对于我的项目,我试图通过使用数据库中过去学生的数据来预测过去学生的A级数学成绩。所以过去的学生1在数学A级中获得了A。在第一年的考试中,他们获得了计算机A,物理B,化学A,男性和97%的出勤率。如果现在一年级的学生有相同的成绩,相同的科目,男性和相同的出勤率,我想说他们将获得相同的成绩。

我的代码中的错误说:"致命错误:未捕获的异常'PDOException',消息为'SQLSTATE[42000]:语法错误或访问冲突:1064 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在/home/u717042829/public_html/predicter.php:70 中的第 1 行的 'grade1 = 'Maths', 'A'' 附近使用的正确语法 堆栈跟踪:#0/home/u717042829/public_html/predicter.php(70): PDOStatement->execute() #1 {main} 扔在第 70 行的/home/u717042829/public_html/predicter.php 中"

第 70 行是:

			$query->execute();

.

<?php 
error_reporting(E_ALL); ini_set('display_errors', 1);
require("includes/config.php");
//if not logged in redirect to login page
if(!$user->is_logged_in()){ header('Location: login.php'); } 
//define page title
$title = "Predict a Student's Grade";
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>Past Student</title>
    <!-- Bootstrap Core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
  
    <!-- Custom Fonts -->
    <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body>

<?php 
	if (isset($_POST['name'])) {
		$name     = $_POST['name'];
        $subject1 = $_POST['subject1'];
        $grade1   = $_POST['grade1']; 
        $subject2 = $_POST['subject2'];
        $grade2   = $_POST['grade2'];
        $subject3 = $_POST['subject3'];
        $grade3   = $_POST['grade3'];
        $subject4 = $_POST['subject4'];
        $grade4   = $_POST['grade4'];
        $attendance = $_POST['attendance'];
        $gender     = $_POST['gender'];
			$query = $db->prepare("SELECT * FROM paststudent WHERE subject1, grade1 = :subject1, :grade1");
			$query->bindParam(':subject1', $subject1);
			$query->bindParam(':grade1', $grade1);
			$query->execute();
          
          	

	}
	?>
	<h1> Your predicted grade is <?php echo $query ?> </h1>
</body>
</html>

现在我正在小步骤中将主题 1 与 1 级相匹配,然后做主题 2 2 级,因为我也得到了它的工作。

查询

的这一部分看起来不正确:

WHERE subject1, grade1 = :subject1, :grade1

您很可能打算将其更改为如下所示:

WHERE subject1 = :subject1 AND grade1 = :grade1

因此,该行的最终版本应为:

$query = $db->prepare(  " SELECT * FROM paststudent "
                      . " WHERE subject1 = :subject1 AND grade1 = :grade1");

我建议阅读一些有关SQL基础知识的教程。

这不是你从PDO获得结果的方式,试试

<body>
<table>
....

$query->execute();
          }
while($row = $query->fetch(PDO::FETCH_ASSOC)){
      echo "<tr><td>".$row['user']."</td></tr>"; --change user to what the column is actually called
}
    ?>
</table>  
</body>
</html>