何らかの理由で適切な実行を拒否する 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
これを1時間以上機能させようとしてきましたが、何が問題なのか真剣にわかりません。ここで何が問題なのか誰にもわかりますか?
ポインタをいただければ幸いです。
/////////////////////////////////////////////// 編集: / ////////////////////////////////////////////
回答ありがとうございます。とてもばかげています - 実際、execute ステートメントを忘れていました。当たり前。. . とても、とても恥ずかしい。お手間かけてすみません!!!このように、それは機能します:
if (!$getStatus->execute()) {
errorHandler("Errorcode: {$getStatus->errorCode()},
errorinfo: {$getStatus->errorInfo ()}.");
}
$newStatusArray = $getStatus->fetch();
var_dump($newStatusArray);
bindParamは一番上に留まることができます。これは、この方法の価値についての私の理解と一致しています。PDO ステートメントのスロットに変数を指定するだけで、クエリが実行されるたびに、その時点での変数の値が渡されます。