两个PDO sql语句/使用第二个语句的获取数据

时间:2017-12-08 02:21:51

标签: php sql variables pdo

所以我是PHP / PDO的新手,我在将获取的变量传递给第二个语句时遇到了一些问题。我也遇到异常问题我不知道这种情况的正确结构如何。

try {   
$connection->beginTransaction();
$stmt = $connection->prepare("CALL sproc_patient_profile_physical_exam_hdr(?,?,?)");
$stmt->bindValue(1,$casenumber_fetch,PDO::PARAM_INT);
$stmt->bindValue(2,$patientid_val,PDO::PARAM_INT);  
$stmt->bindValue(3,$enteredby,PDO::PARAM_STR);


while($row = $stmt->fetch()){
    echo $physicalexamid_insert=$row['physicalexamid'];       
    /* I need to use this data for another try and catch or sql statements for example*/

    $count_physical_exam_id = count($physical_exam_id);
    for ($x=0; $x < $count_physical_exam_id; $x++) { 
        if (!(empty($physical_exam_id[$x]))) {
           try {    
            $connection->beginTransaction();
            $stmt = $connection->prepare("CALL sproc_patient_profile_physical_exam_dtl(?,?,?,?,?,?,?)");
            $stmt->bindValue(1,$casenumber_fetch,PDO::PARAM_INT);
            $stmt->bindValue(2,1,PDO::PARAM_INT);   
            $stmt->bindValue(3,$physical_exam_id[$x],PDO::PARAM_INT);
            $stmt->bindValue(4,$physical_exam_desc[$x],PDO::PARAM_STR);
            $stmt->bindValue(5,$normal[$x],PDO::PARAM_INT);
            $stmt->bindValue(6,$undone[$x],PDO::PARAM_INT);
            $stmt->bindValue(7,$specific[$x],PDO::PARAM_INT);

            $stmt->execute();   
            $connection->commit();

            } catch(PDOException $ex) { 
            //$connection->rollBack();
            echo $ex->getMessage();

        }

        }
    }

} 
$stmt->execute();   
$connection->commit();       
} catch(PDOException $ex) { 
$connection->rollBack();
echo $ex->getMessage();

有人可以帮我吗?感谢。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  1. 在调用fetch之前,你没有执行第一个语句。
  2. 您在循环中覆盖了$stmt变量。
  3. 代码的开头部分应如下所示:

    $stmt = $connection->prepare("CALL sproc_patient_profile_physical_exam_hdr(?,?,?)");
    $stmt->bindValue(1,$casenumber_fetch,PDO::PARAM_INT);
    $stmt->bindValue(2,$patientid_val,PDO::PARAM_INT);  
    $stmt->bindValue(3,$enteredby,PDO::PARAM_STR);
    $stmt->execute(); 
    

    完成后,您可以使用控制语句循环播放(例如while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ... })。

    在该控制结构中,不使用变量$stmt作为新的(第二个)语句,而是使用$stmt2$inner_stmt之类的内容,这样就不会覆盖外部变量。