我有一个PDO声明,由于某种原因拒绝正确执行。它返回false。但是,当使用PDO的query()运行完全相同的语句时,它的工作方式应该如此。 。
这是相关代码:
// Prepare PDO statement
$getStatus = $dbHandle->prepare("SELECT `active` FROM `teachers`
WHERE `id` = :teacher LIMIT 1;");
$getStatus->setFetchMode(PDO::FETCH_ASSOC);
$getStatus->bindParam(':teacher', $teacher_id, PDO::PARAM_INT);
// This statement retrieved the relevant teacher id;
// or false, if an invalid teacher was specified; in this
// case, we specify a valid teacher
$teacher_id = array_search($_POST['teacherName'], $acronyms);
// For debugging: show $teacher_id
echo("$teacher_id<br />");
// Execute query; should return an associative array
$newStatusArray = $getStatus->fetch();
// Nothing . . .
print_r($newStatusArray);
// returns "bool(false):
var_dump($newStatusArray);
// Trying with a query
foreach ($dbHandle->query("SELECT `active` FROM `teachers`
WHERE `id` = $teacher_id LIMIT 1;") as $row) {
// This loop runs only once because of the LIMIT 1
$newStatus = $row['active'];
}
// This prints the new status (was changed before, is always 0 or 1)
echo("$newStatus<br />");
普通查询,虽然它应该完全按照预备语句的作用完成,但是有效;但准备好的声明什么也没有。 。
$getStatus->errorCode()
为空。 。 。 MySQL很高兴。此外,$getStatus->debugDumpParams()
显示了它应该是什么:
SQL: [62] SELECT `active` FROM `teachers` WHERE `id` = :teacher LIMIT 1;
Params: 1 Key: Name: [8] :teacher paramno=-1 name=[8] ":teacher"
is_param=1 param_type=1
我一直试图让这个工作超过一个小时,但我真的不知道出了什么问题。谁能看到这里的问题是什么?
我非常感谢任何指针!
///////////////////////////////////////////////编辑://///////////////////////////////////////////// < / p>
感谢您的回答!太愚蠢 - 事实上,我忘记了执行声明。呃。 。非常非常尴尬。抱歉占用了你的时间!!!像这样,它确实有效:
if (!$getStatus->execute()) {
errorHandler("Errorcode: {$getStatus->errorCode()},
errorinfo: {$getStatus->errorInfo ()}.");
}
$newStatusArray = $getStatus->fetch();
var_dump($newStatusArray);
bindParam 可以保持在最顶层;这符合我对这种方法价值的理解;你可以只在PDO语句中为一个槽指定一个变量,并且无论何时执行查询,都会传递当时变量的值。
答案 0 :(得分:4)
你忘记了->execute()
你的陈述。
$getStatus->execute(); // added
$newStatusArray = $getStatus->fetch();
答案 1 :(得分:0)
我很好奇为什么你的指示:
$teacher_id = array_search($_POST['teacherName'], $acronyms);
追踪绑定指令:
$getStatus->bindParam(':teacher', $teacher_id, PDO::PARAM_INT);
也许这是你的问题。
答案 2 :(得分:0)
在从$teacher_id
参数中检索值之前绑定$_POST
。如果你之后移动bindParam()
它应该可以工作。