1

私はここに以前の投稿があります が、それらの答えはどれもうまくいきませんでした。これが私のクラスコード全体です:

<?php
session_start();
class Mysql {
    private $conn;

    function __construct() {
        $this->conn =  new PDO('mysql:host=***;dbname=***;charset=UTF-8','***','***') or 
                      die('There was a problem connecting to the database.');
    }

    function verify_Username_and_Pass($un, $pwd) {
        $query = "SELECT Username
                FROM Conference
                WHERE Username = :un AND Password = :pwd";

        $stmt = $this->conn->prepare($query);

        $stmt->bindParam(':un', $un);
        $stmt->bindParam(':pwd', $pwd);
        $stmt->execute();
        if ($stmt->rowCount() > 0) {
            // User exist
            $stmt->bindColumn('First Name', $firstName); 
            $_SESSION["FirstName"] = $firstName; 
            die($_SESSION["FirstName"]);
            return true;
            $stmt->close();
        }
        else {
            // User doesn't exist
            //die("failure");
            return false;
            $stmt->close();
        }
    }
}
?>

私はfetchを試しました、bind_resultを試しましたが、どれもdieステートメントに正しい値を出力しません。これは、ユーザー名をセッションに保存して印刷しようとしたときに機能しました。コードの何が問題になっていますか?

4

2 に答える 2

1
  1. スニペットのコードを呼び出していません。呼び出し手順は何ですか?

  2. 取得しているConference.First NameだけではないConference.Usernameので、エラーが表示されていない限り、警告が表示されます。あなたはおそらくしたい

"SELECT * FROM Conference...."

また

"SELECT FirstName From Conference WHERE Username = :un AND Password = :pwd";

  1. おそらくConference.FirstNameです。

  2. die();デバッグにはあまり役立ちません。試すvar_dump($_SESSION["FirstName"]); die();

于 2012-10-02T19:30:54.327 に答える
1

私はあなたのコードを見て、自分のサーバーで動作するバージョンを作成しました。ご不明な点がございましたら、お気軽にお問い合わせください。

class Mysql
{
  private $conn;
  public  $error;
  public  $username;

  function __construct()
  {
    try {
      $this->conn = new PDO( 'mysql:host=localhost;dbname=****', 'root', '****' );
      $this->conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

    }
    catch ( Exception $e ) {
       $this->error = $e->getMessage();
    }
  }

  function verify_Username_and_Pass( $un, $pwd )
  {
    $query = "SELECT Username
              FROM Conference
              WHERE Username = :un AND Password = :pwd";

    $stmt = $this->conn->prepare( $query );
    if( !$stmt ) {
      $this->error = $this->conn->errorInfo();
      return false;        
    }

    $stmt->bindParam( ':un', $un );
    $stmt->bindParam( ':pwd', $pwd );
    $stmt->execute();
    if ( $stmt->rowCount() > 0 ) {
      // User exist
      $this->username = $stmt->fetchColumn();
      return true;
    } 
    else {
      // User doesn't exist
      return false;
    }
  }

}

session_start();

$db = new Mysql();
if( !$db->error ) {
  if( $db->verify_Username_and_Pass ( 'user', 'test' )) {
    $_SESSION["FirstName"] = $db->username;
  }
  else
    echo 'Unknown user';
}

var_dump( $db );

スクリプトはこれを出力します:

Unknown user

object(Mysql)#1 (3) { 
["conn":"Mysql":private]=> object(PDO)#2 (0) { } 
["error"]=> array(3) 
   { [0]=> string(5) "42S02" 
     [1]=> int(1146) 
     [2]=> string(39) "Table   'xxxx.Conference' doesn't exist" } 
["username"]=> NULL }
于 2012-10-02T19:22:24.170 に答える