を持つクエリのトランザクションを使用すると、私のスクリプトの構造である:私のコードのここに依存した結果
try {
$dbh_conn->beginTransaction();
$stmt1 = $dbh_conn->prepare("SELECT user_id FROM activate_account WHERE token = ?");
$stmt1->execute(array($validate_activate_token));
$num_rows = $stmt1->fetch(PDO::FETCH_ASSOC);
if($num_rows) {
$user_id = $num_rows['user_id'];
$stmt2 = $dbh_conn->prepare("UPDATE users SET active = 1 WHERE id = ?");
$stmt2->execute(array($user_id));
$updated = $stmt2->rowCount();
if ($updated > 0){
$stmt3 = $dbh_conn->prepare("DELETE FROM activate_account WHERE token = ?");
$stmt3->execute(array($validate_activate_token));
$status = "all fine";
} else {
$status = "first problem";
}
} else {
$status = "second problem";
}
$dbh_conn->commit();
echo $status;
die;
} catch(PDOException $e) {
$dbh_conn->rollBack();
$status = "third problem";
echo $status;
die;
}
結果は常にsecond problem
です。どうして?そして、それを修正するためにコードを書き直すにはどうすればよいですか?私は(単独で別のスクリプトでは)別にこの条件if($num_rows) {
をテストしてみた
注、それは真ですが、私は上記のスクリプトにそれを書くとき、それは常に偽です。
'fetch()'はエラーがあればFALSEを返します。これらのクエリでこのようなエラーが発生しないことは確かですか?フェッチするレコードがもうない場合はNULLを返します。あなたは本当に質問が入力を与えられた結果を返すと確信していますか?ログの調査を試みることができます。 –