首页 > 解决方案 > 出现错误 SQLSTATE[HY000]:一般错误:尝试执行 if 语句时出现 2031

问题描述

我对 sql 的实际工作方式不是很有经验,但我正在尝试检查数据库是否包含一个值,如果是,那么它会找到 id 的所有值,如果不是,它只会将一个特定的值绑定到这个想法。我在错误日志中收到该行的错误<?php foreach ($edited as $key => $value) : ?>

我没有尝试太多来解决它,因为我遇到了障碍,但是我看到了一些关于绑定限制的内容,我不确定我的第一个查询是否超过了该限制,或者我是否只是过于复杂了它和实际上有一种更短的方法来做我正在尝试的事情。

//In user.php
public function isChangeRequested($requested){
        if ($requested != "Requested"){ 
            return true;
        }
        return false;
    }
///

<?php
if (isset($_GET['id'])) {
  try {
    $id = $_GET['id'];
    $requestedstatus = "SELECT  change_request FROM timesheet WHERE id = :id";
    $results = $db->query($requestedstatus);
    if($user->isChangeRequested($results)){
      $isrequested = "SELECT * FROM timesheet WHERE id = :id";
      $statement = $db->prepare($isrequested);
      $statement->bindValue(':id', $id);
      $statement->execute();
      $edited = $statement->fetch(PDO::FETCH_ASSOC);
    } 
    else {
      $notrequested = "SELECT approve_status FROM timesheet WHERE id = :id";
      $statement = $db->prepare($notrequested);//submit_day, time_in, time_out, approve_status
      $statement->bindValue(':id', $id);
      $statement->execute();
      $edited = $statement->fetch(PDO::FETCH_ASSOC);
    }

  } catch(PDOException $error) {
      echo $sql . "<br>" . $error->getMessage();
  }
} else {
    echo "Something went wrong!";
    exit;
}
?>

<form method="post" name="editform">
<?php foreach ($edited as $key => $value) : ?>
<label style="padding-top: 10px;" for="<?php echo $key; ?>"><?php echo ucwords(str_replace("_"," ", $key)); ?></label>
<input style="padding-top: : 10px;"  type="text" class="form-control" name="<?php echo $key; ?>" id="<?php echo $key; ?>" value="<?php echo $value; ?>" <?php echo ($key === 'id' ? 'readonly' : null);?> <?php echo ($key === 'name' ? 'readonly' : null);?> <?php echo ($key === 'submit_status' ? 'readonly' : null);?> <?php echo ($key === 'user_id' ? 'readonly' : null);?>>
<?php endforeach; ?>
<input style="margin-top:20px;" class="btn btn-primary" type="submit" name="submit" value="Update Entry">
</form>

我的预期结果是,如果数据库包含 Requested,主管可以查看和编辑所有字段,但如果没有请求,那么主管只能查看和编辑 Approved 字段。

标签: phpmysqlsql

解决方案


if (isset($_GET['id'])) {
  try {
    $id = $_GET['id'];
    $requestedstatus = "SELECT  change_request FROM timesheet WHERE id = :id";
    $results = $db->prepare($requestedstatus);
    $results->bindValue(':id', $id);
    $results->execute();
    $requestedresult = $results->fetch(PDO::FETCH_ASSOC);
    foreach ($requestedresult as $thatshitsrequested)
    echo $thatshitsrequested;
    if(!$user->isChangeRequested($thatshitsrequested)){
      $isrequested = "SELECT * FROM timesheet WHERE id = :id";
      $statement = $db->prepare($isrequested);
      $statement->bindValue(':id', $id);
      $statement->execute();
      $edited = $statement->fetch(PDO::FETCH_ASSOC);
    } 
    else {
      $notrequested = "SELECT approve_status FROM timesheet WHERE id = :id";
      $statement = $db->prepare($notrequested);//submit_day, time_in, time_out, approve_status
      $statement->bindValue(':id', $id);
      $statement->execute();
      $edited = $statement->fetch(PDO::FETCH_ASSOC);
    }

  } catch(PDOException $error) {
      echo $sql . "<br>" . $error->getMessage();
  }
} else {
    echo "Something went wrong!";
    exit;
}

推荐阅读