-1

何らかの理由で適切な実行を拒否する 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 ステートメントのスロットに変数を指定するだけで、クエリが実行されるたびに、その時点での変数の値が渡されます。

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 に答える