我省略了不必要的代码。每当我尝试运行它时,它都会没有任何错误地处理。但是,在更新查询中,每当我使用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");
}
}
答案 0 :(得分: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
的原因你没有定义任何这样的变量,至少我在你发布的代码中可以看到这一点。
答案 1 :(得分:0)
您已将查询编写为直接查询(其中定义了所有选项),但您正在运行prepare
,其查询将如下所示
UPDATE students SET student_name=?, tutor=?, intervention=? WHERE student_id=?
然后,您将运行bind_param将数据绑定到预准备语句,然后execute()
因此,要么将查询转换为预准备语句查询并绑定参数,要么从prepare
更改为query
答案 2 :(得分:0)
这里有几件事......
配置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));
停止捕获异常并将其丢弃。这在发展过程中是最重要的。一旦您确信代码正常运行,就可以实现高级异常处理方案。只需从代码中删除try
控件和catch
块
使用参数绑定查询而不是字符串插值。这将使您的查询对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
您对更新查询也会这样做。