1

現在、ある領域では機能するが別の領域では機能しないデータベース呼び出しがあります。

私のデータベースクラスは$databaseというラベルが付けられており、$dbPDOオブジェクトがデータベースコンストラクターに渡されています。

これはすべて正常に機能します。

このコード呼び出しは機能します

$user_info = $database->get_user($user);

この関数は呼び出されます

public function get_user($user){
        $user = $this->db->quote($user);
        $query = "SELECT * FROM login where username = $user";
        $user = $this->db->query($query);
        $user_info = $user->fetch();
        return $user_info;}

これにより、ユーザー情報が期待どおりに返されます

別の呼び出しは

        $user = $database->confirm($confirm);
        $user_info = $database->get_user($user);

確認機能はこんな感じ

        public function confirm($confirm){
        $confirm = $this->db->quote($confirm);
        $query = "SELECT * FROM temp_data WHERE hash = $confirm;";
        $count = $this->db->query($query);
        $info = $count->fetch();

        $user = $info['username'];
        $user = $this->db->quote($user);
        $query = "DELETE FROM temp_data WHERE username = $user;";
        $this->db->exec($query);
        $query = "UPDATE login SET confirm = '1' WHERE  username = $user;";
        $this->db->exec($query);
        return $info['username'];}

この呼び出しは完全に機能します。

ユーザー名を引用符で囲まれていない形式で返しますget_user

しかしget_user失敗する

トラブルシューティングを行いましたが、問題は、の次の行がget_userPDOオブジェクトまたはデータをまったく返さないことです。

$user = $this->db->query($query); 

これは興味深い部分です。try catchを実行しましたが、PDOはPDO例外をスローせず、一般的な例外もスローしていません。エラーログにエラーはありません。動作していないようです。、、を使用して段階的に実行 しPrint_r、その後にaを使用して結果を出力しましたが、2番目のデータベース呼び出しを実行するまですべて正常に機能します。フェッチがエラーを返していますが、これはexecがまったく実行されていないためです。get_classechodie;

unset()作成され、作成時にデータベースオブジェクトに渡されるメインのDB接続以外のすべてで使用してみました

スクリプトの実行時に何が起こっているかを次に示します。

  1. ユーザーがランダムハッシュのリンクをクリックする
  2. システムはGETからハッシュを取得し、それを使用して一時データベースからユーザー名を取得します。
  3. 次に、確認済みとしてユーザーを変更し、一時エントリを削除してから、ユーザー名を返します。
  4. ここから、を呼び出しますget_user。この場合、twilioサブアカウントを設定するためのユーザー情報を返すだけです。これは、システムに障害が発生している場所です
  5. その後、(ここでエラーが発生するため、テストから実行しようとします)、twilio APIにアクセスし、サブカウントのAUTHおよびSIDトークンを取得して、ユーザーファイルに書き込みます。
  6. 次に、新しいユーザーはサインインページにリダイレクトされます

カーソルを閉じてみましたが、うまくいきませんでした。

誰かが私が抱えている問題、または私が間違っていることについての洞察を私に与えることができれば、私はそれをいただければ幸いです。私はPDOオブジェクトを初めて使用するので、どこかでばかげた間違いを犯したと確信しています。

4

1 に答える 1

1

PHPFreaksIRCチャンネルの素晴らしい人から答えを得ることができました。

public function get_user($user){
        $stmt = $this->db->prepare('SELECT * FROM login where username = :u');
        $stmt->bindValue(':u', $user);
        $stmt->execute();

        $user_info = $stmt->fetch();
        $stmt->closeCursor();

        return $user_info;
}


public function confirm($confirm){
        $stmt = $this->db->prepare('SELECT * FROM temp_data WHERE hash = :h');
        $stmt->bindValue(':h', $confirm);
        $stmt->execute();
        $info = $stmt->fetch();
        $stmt->closeCursor();

        $stmt = $this->db->prepare('DELETE FROM temp_data WHERE username = :u');
        $stmt->bindValue(':u', $info['username']);
        $stmt->execute();

        $stmt = $this->db->prepare('UPDATE login SET confirm = '1' WHERE  username = :u');
        $stmt->bindValue(':u', $info['username']);
        $stmt->execute();

        return $info['username'];
}
于 2012-05-09T13:50:09.827 に答える