0

こんにちは、現在、php 5.3 を mysql サーバー 5.1.61 と組み合わせて使用​​しています。現在、ログイン スクリプトを実行しようとしていますが、結果データもエラー メッセージも表示されないという問題に直面しています。ログインを処理する関数は次のとおりです。

 public function doLogin($username,$pw)
    {
        $db=new incdb();
        $row['name']=':username';
        $row['value']=$username;
        $row['type']=PDO::PARAM_STR;
        $parameters[]=$row;
        $row['name'] = ':password';
        $row['value'] = $pw;
        $row['type'] = PDO::PARAM_STR;
        $parameters[] = $row;
        $query=$db->execSql('SELECT * FROM tbUser WHERE '
                        .'username=:username AND password=MD5(:password)',$parameters);
        unset($parameters);
        unset($db);
        $data=$query->fetch();
        if (isset($data) && is_array($data))
        {
            $_SESSION['loggedIn']=$data['id'];
            $_SESSION['loggedInData']=$data;
            return 1;
        }
        else
        {
            echo 'error';
            return 0;
        }
}

incdb クラスには、次のような execSql 関数があります。

    public function execSql($sql, $parameters)
{
    $query=$this->pdo->prepare($sql);

    foreach ($parameters as $param)
    {
        $query->bindParam($param['name'], $param['value'], $param['type']);
    }
    $query->execute();

    return $query;
}

誰かが私がここで間違っていることを教えてもらえますか? (私はphp PDOの使用に比較的慣れていません....過去には常にmysql関数を直接使用していました)。TNX

4

2 に答える 2

0

間違ったパラメーターを渡していると思います。位置 0 の配列を含む配列を渡しています。値を含む連想配列を 1 つだけ渡す必要があります。例えば

array('username' => 'mjuarez')
于 2012-10-03T13:17:20.460 に答える
0

パラメータを関数の引数としてバインドすることはできないと思います。

コードを次のように変更します。

$row['name'] = ':password';
$row['value'] = MD5($pw);
$row['type'] = PDO::PARAM_STR;

そして、あなたのクエリは次のようになります:

$query=$db->execSql(
  'SELECT * FROM tbUser WHERE '
   .'username=:username AND password=:password', $parameters);

データベースの文字セットによっては、ユーザー名の比較で大文字と小文字が区別される場合があることに注意してください。

于 2012-10-03T13:08:28.237 に答える