我有一个 PDO 语句,由于某种原因拒绝正确执行。它返回假。但是,当使用 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
我一直试图让它工作一个多小时,但我真的不明白出了什么问题。任何人都可以看到这里有什么问题吗?
我将不胜感激任何指针!
/////////////////////////////////////////////// 编辑: / //////////////////////////////////////
谢谢您的回答!太愚蠢了——事实上,我忘记了执行语句。呃。. . 非常非常尴尬。很抱歉占用了您的时间!!!像这样,它确实有效:
if (!$getStatus->execute()) {
errorHandler("Errorcode: {$getStatus->errorCode()},
errorinfo: {$getStatus->errorInfo ()}.");
}
$newStatusArray = $getStatus->fetch();
var_dump($newStatusArray);
bindParam可以留在顶部;这符合我对这种方法价值的理解;您可以在 PDO 语句中将一个变量指定给一个槽,并且每当执行查询时,该变量的值就会被传递。