2

この質問があいまいに見えないことを願っていますが、古い mysql ステートメントを PDO 準備済みステートメントに変換しています。検索しましたが、これに対する答えが見つかりません。$count=mysql_num_rows($stmt);PDOに相当するものは何ですか? コードを含めたので、何をしているのかがわかりますが、基本的にはSELECT、一致するユーザー名とパスワードの行をデータベースで検索するために使用する PDO ステートメントを持つユーザーのログインページを作成しています。それが1つ思いついた場合、$count変数を1に増やして、私のIFステートメントが真になるようにします。

CHECK_LOGIN.PHP

<?php
require 'functions.php';
require 'DB.php';
ob_start();

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword =$_POST['mypassword'];
$mypassword = md5($_POST['mypassword']);

checkLogin($conn,$myusername,$mypassword,$stmt);

// Mysql_num_row is counting table row
$count=mysql_num_rows($stmt);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
    session_start();
    $_SESSION['myusername'] = $myusername;
    session_is_registered("myusername");
    session_is_registered("mypassword"); 
    $myusername1 = $_SESSION['myusername'];
    //UPDATE LAST LOGIN IN DATABASE
    date_default_timezone_set('America/Chicago');
    $last_login = date('m/d/Y h:i:s a', time());
    lastLogin($conn,$myusername1,$last_login);
    header("location:form.php");


}
else {

echo "Wrong Username or Password";

}
ob_end_flush();
?>

FUNCTION.PHP の関数

function checkLogin($conn,$myusername,$mypassword,$stmt){

$myusername = stripslashes($myusername);
$myusername = mysql_real_escape_string($myusername);
$stmt = $conn->prepare('SELECT * FROM `CLL_users` WHERE `user_name`=:myusername AND `password`=:mypassword');
$stmt->execute(array(':myusername' => $myusername, ':mypassword' => $mypassword));
}
4

1 に答える 1

4

ここから例 #2 を確認してください: PDOStatement::rowCount

ほとんどのデータベースでは、PDOStatement::rowCount() は SELECT ステートメントの影響を受ける行数を返しません。代わりに、PDO::query() を使用して、意図した SELECT ステートメントと同じ述語を含む SELECT COUNT(*) ステートメントを発行してから、PDOStatement::fetchColumn() を使用して、返される行数を取得します。その後、アプリケーションは正しいアクションを実行できます。

于 2012-11-04T02:29:59.237 に答える