-1

I am new to PDO. I get stuck, now I am here. I tried basic crude in

PDO and get error invalid parameter: parameter was not defined

from Update part. Please help me?

 public function update_by_id($data) {
    $id = $data['student_id'];
    $name = $data['student_name'];
    $department = $data['department'];
    $email = $data['email_address'];
    $city = $data['city'];
    try {
        $sql = "UPDATE tbl_student SET student_name=:name, department=:department, email_address=:email, city=:city WHERE student_id='$id' ";

        $stmt = $this->db_conn->prepare($sql);

        $stmt->bindParam(':name', $name, PDO::PARAM_STR);
        $stmt->bindParam(':department', $department, PDO::PARAM_STR);
        $stmt->bindParam(':email_address', $email, PDO::PARAM_STR);
        $stmt->bindParam(':city', $city, PDO::PARAM_STR);

        if($stmt->execute()) {
            header('Location: view_student.php');
        }
        else {
            echo $this->db_conn->errorInfo();
        }

    } catch (Exception $e) {
        echo $e->getMessage();
    }

}
Your Common Sense
  • 156,878
  • 40
  • 214
  • 345
Nishan Singha
  • 169
  • 1
  • 3
  • 13

2 Answers2

1

Instead of :email_address use :email

 $stmt->bindParam(':email', $email, PDO::PARAM_STR);

Because your bind email_address=:email, in your query

And you can bind your $id too in your code

$sql = "UPDATE tbl_student SET student_name=:name, department=:department, email_address=:email, city=:city WHERE student_id=:id";
    $stmt = $this->db_conn->prepare($sql);

    $stmt->bindParam(':name', $name, PDO::PARAM_STR);
    $stmt->bindParam(':department', $department, PDO::PARAM_STR);
    $stmt->bindParam(':email', $email, PDO::PARAM_STR);
    $stmt->bindParam(':city', $city, PDO::PARAM_STR);
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);
Jay Blanchard
  • 34,243
  • 16
  • 77
  • 119
Saty
  • 22,443
  • 7
  • 33
  • 51
0

Change

 $stmt->bindParam(':email_address', $email, PDO::PARAM_STR);

To

 $stmt->bindParam(':email', $email, PDO::PARAM_STR);

As you are using

.., email_address=:email,...
Pupil
  • 23,834
  • 6
  • 44
  • 66