0

我省略了不必要的代码。每当我尝试运行它时,它都会处理而没有任何错误。但是,在更新查询中,每当我使用 WHERE student_id='$student_id' 时,它都不会更新。没有错误,它只是不更新​​。但是,当我使用变量的等值数字时,例如 1,它工作得很好。我错过了什么?谢谢!

$resolved_student_id = $_GET['student_id'];

try {
   $request_sd = $db -> prepare("SELECT student_name,tutor,intervention FROM students WHERE student_id='$resolved_student_id'");
   $request_sd -> execute();
} catch ( Exception $e ) {
   echo "Could not query database.";
   exit;
}

$studentdata = $request_sd -> fetch();


if ( empty( $_POST ) === false ) {
   if ( empty( $_POST['student_name'] ) === true || empty( $_POST['student_tutor'] ) === true || empty( $_POST['student_intervention'] ) === true ) {
    $updateStudentInformation = "You need to fill out all fields.";
} else {
    $student_name = $_POST['student_name'];
    $student_tutor = $_POST['student_tutor'];
    $student_intervention = $_POST['student_intervention'];

    try {
       $updatedata = $db -> prepare("UPDATE students SET student_name='$student_name', tutor='$student_tutor', intervention='$student_intervention' WHERE student_id='$resolved_student_id'");
       $updatedata -> execute();
    } catch (Exception $e) {
       echo "Could not update database.";
       exit;
    }
    header("location: edit.php");
  }
}
4

3 回答 3

1

你怎么在这里同时使用 get 和 post 方法?

我猜这个:$resolved_student_id = $_GET['student_id'];

应替换为:$resolved_student_id = $_POST['student_id'];

如果您需要这两种方法,请确保在表单 URL 中指定 GET 数据。

eg:<form method="POST" action="abc.php?student_id=1">

它不更新的原因$student_id是你没有定义任何这样的变量,至少不是我在你发布的代码中可以看到的。

于 2013-10-15T00:11:37.510 回答
0

您已将查询编写为直接查询(定义了所有选项)但您正在运行prepare,您的查询将如下所示

UPDATE students SET student_name=?, tutor=?, intervention=? WHERE student_id=?

然后您将运行bind_param将您的数据绑定到准备好的语句,然后execute()

因此,要么将您的查询转换为准备好的语句查询并绑定您的参数,要么从更改preparequery

于 2013-10-15T00:04:42.100 回答
0

这里有几件事...

  1. 配置 PDO 以引发异常。我喜欢使用这个构造函数来优化 MySQL 的使用

    $db = new PDO('mysql:host=localhost;dbname=db_name;charset=utf8', 'username', 'password', array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC));
    
  2. 停止捕获异常并丢弃它们。这在开发过程中是最重要的。一旦您确信您的代码可以正常运行,您就可以实现高级异常处理方案。只需从代码中删除try控件和catch

  3. 对查询使用参数绑定而不是字符串插值。这将使您的查询对 SQL 注入攻击更具弹性。

    $request_sd = $db->prepare("SELECT student_name,tutor,intervention FROM students WHERE student_id = ?");
    $request_sd->execute([$resolved_student_id]);
    // use array($resolved_student_id) if using an older version of PHP
    

    您将对更新查询执行相同的操作。

于 2013-10-15T00:31:18.890 回答