0

MySQLを使用して機能的なログインスクリプトを作成しました。ただし、PDOを使用して実行する必要があると言われ、機能するPDO接続があります。

function getConnection()
{
    $userName = '*****';
    $password = '*****';
    $dbname = '******';
    $db = new PDO("mysql:host=localhost;dbname=$dbname", $userName, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $db;

ただし、ログインクエリをPDOに変換する方法がわかりません。

if (isset($_REQUEST['attempt']))
{
    $user = $_POST['user'];
    $password = $_POST['password'];

    $qry = mysql_query
        ("SELECT *
          FROM subscriber
          WHERE email = '$user'
          AND password = '$password'")
        or die(mysql_error());

    $total = mysql_num_rows($qry);

    if ($total > 0)
    {
        session_start();
        $_SESSION['user'] = 'yes';
        header('location: account.php');
        exit;
    }
    else
    {
        // Do nothing.
    }
}

どうすればいいですか?

4

3 に答える 3

6

開始するには:

$db = getConnection();
$stmt = $db->prepare("
    SELECT * FROM subscriber WHERE email = :email AND password = :password
");
$stmt->bindParam(":email"   , $user    );
$stmt->bindParam(":password", $password);
$stmt->execute();
$total = $stmt->rowCount();
于 2012-04-27T11:44:40.350 に答える
1

肥大化していないバージョン:

$stm = $pdo->prepare("SELECT * FROM subscriber WHERE email = ? AND password = ?");
$stm-> execute($_POST['user'], $_POST['password']);
if ($id = $stm->fetchColumn()) {
    session_start();
    $_SESSION['user'] = $id;
    header('location: account.php');
    exit;
}
于 2013-03-16T08:33:34.280 に答える
-1

bindParamを使用したくない場合は、この例を使用することもできます。しかし、私は@eggyalの答えからそれを抽出しました。egyalに感謝します。

<?php session_start();
    include_once('pdo.inc.php');

    $username = (isset($_POST['username']))? trim($_POST['username']): '';
    $password = (isset($_POST['password']))? $_POST['password'] : '';
    $pas = md5($password);
    $redirect = (isset($_REQUEST['redirect']))? $_REQUEST['redirect'] :
        'view.php';
    $query = ("SELECT username FROM site_user WHERE username=:username
              AND password =:password");
    $query_login = $con->prepare($query);
    $query_login->execute(array(
        ':username'=>$username,
        ':password'=>$pas));
    $result = $query_login->rowCount();

    if($result>0)
    {
        $_SESSION['username'] = $username;
        $_SESSION['logged'] = 1;
        echo "success";
    }
    else {
        // Set these explicitly just to make sure
        echo 'User name invalid';
    }
?>
于 2013-03-16T08:16:43.903 に答える