0

以下は私の「ログインチェッカー」です。古い従来のmysql接続を使用すると正常に機能しますが、PDOでは機能しないようです。このコードを機能させるためのヒントや変更を誰かに教えてもらえますか?

それは私にこのエラーを与えます:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\clubresults\checklogin.php on line 23

ここで、23行目は$ count = mysql_num_rows($ result);です。ありがとう!!

<?php
ob_start();
$tbl_name="admin_passwords"; // Table name 

        $pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
    #Set Error Mode to ERRMODE_EXCEPTION.
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// 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["myusername"] = "$myusername";
$_SESSION["mypassword"] = "$mypassword";
header("location:login_success.php");
}
else {

echo "ACCESS DENIED.<br> Incorrect username and/or Password
<br>Please check your username and password. <br> wait five seconds for redirection. ";
}
ob_flush();
?>
4

3 に答える 3

2

PDOを完全に活用し、パラメーター化されたステートメントを使用しているようには見えません。

もしそれが私だったら、私はあなたのコードを次のように書いたでしょう:

$tbl_name="admin_passwords"; // Table name 

$pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
#Set Error Mode to ERRMODE_EXCEPTION.
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("SELECT * FROM $tbl_name WHERE username = :username AND password = :password");
$stmt->execute(array('username' => $_POST['myusername'], 'password' => $_POST['mypassword']));
if ($stmt->fetch() === false) {
    //access deined
    //....
}
else {
   //access granted
   //...
}

また、セキュリティ上の理由から、データベース内で少なくともsha1を使用してパスワードをハッシュする必要があります(私はsha512を実行します)。これにより、データが盗まれた場合でも、かなりの労力をかけずにパスワードをリバースエンジニアリングできなくなります。

編集:もう一度見てみると、root以外のユーザーを使用してデータベースにアクセスするのも良いかもしれませんが、それはより個人的な好みです。

于 2012-05-31T06:18:48.670 に答える
0

次の行の結果を印刷してみてください。

$result=mysql_query($sql);

link_identifierが渡されていないため、mysql_queryが失敗している可能性があります。

于 2012-05-31T06:12:10.393 に答える
0

mysql_queryではなくpdo-queryを作成する必要があります。

ここを参照してください:http://php.net/manual/en/pdo.query.php

于 2012-05-31T06:16:07.203 に答える