allow pdo prepared statements with none prepared statement

问题描述 投票:0回答:0

拜托我看到了这个错误。

致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效参数 数字:绑定变量的数量与中的标记数量不匹配 /var/www/hospital/classes/users.class.php:2871 堆栈跟踪:#0 /var/www/hospital/classes/users.class.php(2871): PDOStatement->execute() #1 /var/www/hospital/classes/usersview.class.php(71): 用户->getAllvisits() #2 /var/www/hospital/user.php(1176): UsersView->showAllvisits() #3 {main} 抛出 /var/www/hospital/classes/users.class.php 第 2871 行

这就是我通常在 users.class.php 中为大多数函数编写准备好的语句的方式,并且没有错误。

 protected function getAlluserregtype($reg_type_id,$subgroup, $hospital_id){
        $sql="SELECT `user_id` FROM `user_reg_type` WHERE `reg_type_id`=? AND `subgroup`=? AND `hospital_id`=? ORDER BY `id` DESC";
        $stmt= $this->connect()->prepare($sql);
        $stmt->execute([$reg_type_id,$subgroup, $hospital_id]);
        $user=$stmt->fetchAll();
        return $user;

    }

 protected function getLimiteduserregtype($reg_type_id,$subgroup, $hospital_id,$offset,$limit){
        $sql="SELECT `user_id` FROM `user_reg_type` WHERE `reg_type_id`=? AND `subgroup`=? AND `hospital_id`=? ORDER BY `id` DESC LIMIT ?,?";
        $stmt= $this->connect()->prepare($sql);
         $stmt->bindParam(1, $reg_type_id, PDO::PARAM_STR);
         $stmt->bindParam(2, $subgroup, PDO::PARAM_STR);
            $stmt->bindParam(3, $hospital_id, PDO::PARAM_INT);
            $stmt->bindParam(4, $offset, PDO::PARAM_INT);
            $stmt->bindParam(5, $limit, PDO::PARAM_INT);
         
        $stmt->execute();
        $user=$stmt->fetchAll();
        return $user;

    } 

但是当我这样写的时候,我得到了错误。请我需要帮助来解决它。因为这是我认为我可以在 user.php 下执行它而不会丢失任何变量的唯一方法 这是错误函数的 users.class.php

protected function getAllvisits($pat_id){
        $sql="SELECT COUNT(DISTINCT(DATE(`at`))) AS visits FROM (SELECT `at`  FROM `treatments` WHERE `pat_id`='$pat_id' 
        
        UNION ALL
        SELECT `at`  FROM `complaints` WHERE `patient_id`='$pat_id' 
        
        UNION ALL
        SELECT `at` FROM `diagnosis` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `clinical_note` WHERE `patient_id`='$pat_id' 
        UNION ALL
         SELECT `at` FROM `round_ward` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `recommended_procedure` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `patient_symptoms` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `medical_exam` WHERE `patient_id`='$pat_id' 
         UNION ALL
        SELECT `at` FROM `patient_test` WHERE `patient_id`='$pat_id' 
          UNION ALL
           SELECT `at` FROM `past_obsterics` WHERE `patient_id`='$pat_id' 
          UNION ALL
        SELECT `at` FROM `patient_prescription` WHERE `patient_id`='$pat_id' 
          UNION ALL
        SELECT `at` FROM `patient_ward` WHERE `patient_id`='$pat_id' 
         UNION ALL
        SELECT `at` FROM `anc` WHERE `patient_id`='$pat_id' 
         UNION ALL
        SELECT `at` FROM `present_obsterics` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `presenting_complaint` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `medical_history` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `family_complaint` WHERE `patient_id`='$pat_id' 
        UNION ALL
        SELECT `at` FROM `vacination_schedule` WHERE `patient_id`='$pat_id'
       UNION ALL
        SELECT `at` FROM  `diet_treatment` WHERE `patient_id`='$pat_id' 
       UNION ALL
        SELECT `at` FROM `physiotheraphy_treatment` WHERE `patient_id`='$pat_id' 
        ) t
        ";
        $stmt= $this->connect()->prepare($sql);
        $stmt->execute([$pat_id]);
        $user=$stmt->fetch();
        return $user;

    }

这里的另一个类 usersview.class.php

 public function showAllvisits($pat_id)
    {
        $results=$this->getAllvisits($pat_id);
        return $results;


    }

在这里实现 user.php

$patvisits=$usersview->showAllvisits($patient['user_id']);

谢谢

php pdo prepared-statement
© www.soinside.com 2019 - 2024. All rights reserved.