-1

我有一个 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 语句中将一个变量指定给一个槽,并且每当执行查询时,该变量的值就会被传递。

4

3 回答 3

4

你忘了->execute()你的陈述。

$getStatus->execute(); // added
$newStatusArray = $getStatus->fetch();
于 2012-11-15T09:15:29.587 回答
0

我很好奇为什么你的指示:

$teacher_id = array_search($_POST['teacherName'], $acronyms);

在绑定指令之后:

$getStatus->bindParam(':teacher', $teacher_id, PDO::PARAM_INT);

也许这是你的问题。

于 2012-11-15T09:11:56.443 回答
0

在从参数中$teacher_id检索值之前进行绑定。$_POST如果你移动bindParam()之后它应该工作。

于 2012-11-15T09:14:02.760 回答