php - 出现错误 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 字段。
解决方案
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;
}
推荐阅读
- r - 计算分组面板数据中的熵
- java - 登录后android应用程序未启动意图
- python - 练习加密并关闭 1 个字符
- react-admin - 创建新记录不会在没有刷新的情况下在列表中注册并创建重复记录
- ios - 阻止并成为新的主屏幕 Swift iOS
- c++ - 选择要调用的构造函数
- css - 单个 SCSS 规则在服务器上显示“未定义”但在 localhost 中有效
- c - 来自 Valgrind 的错误:“大小为 8 的无效写入”和“地址...低于堆栈指针”
- python-3.x - 在 Keras 中发出目标数组(形状)
- react-native - react-native-datepicker 更改输入格式