まず、これはと関係がある。PDOフェッチ(PDO :: FETCH_ASSOC)が値を返さない
データベースの値を$ _SESSSION変数に格納しようとしています。最初は、username = userとpassword = passwordのような行をすべて選択しようとしました。
> 0を返した場合は、(PDO :: FETCH_ASSOC)をフェッチしてその行を取得しようとしました。 問題は、> 0を返しますが、FETCH_ASSOC
は値を返しません。
これまで私が試したことは次のとおりです。あなたの状態の場合に、あなたの配列を比較することはできませんので、列0
から始まる、あなたの結果 セットに返されるPDO::FETCH_NUM:
<?php if(isset($_POST['btn_Save'])){ $uname = $_POST['username']; $pword = $_POST['password']; $q = "SELECT * FROM `users` WHERE `username` = :username AND `password` = :password"; $sql = $db->prepare($q); $sql->bindParam(":username",$uname); $sql->bindParam(":password",$pword); $sql->execute(); $rows = $sql->fetch(PDO::FETCH_NUM); if($rows > 0){ $rows2 = $sql->fetch(PDO::FETCH_ASSOC); echo $rows2['userID']; $_SESSION['account'] = $rows2['userID']; $_SESSION['name'] = $rows2['firstName']; //echo" <meta http-equiv='refresh' content='0;url=index.php'>"; } else{ echo"<script>alert('No user found!');</script>"; // echo" <meta http-equiv='refresh' content='0;url=index.php'>"; }
'$ rows = $ sql-> fetch(PDO :: FETCH_NUM);を削除します。if($ rows> 0){'はコードから取り出し、' $ rows2 = $ sql-> fetch(PDO :: FETCH_ASSOC);を使用します。 if(count($ rows2)> 0){' – Saty
パスワードをデータベースに平文で保存しないでください。サーバーの所有者がすべてのパスワードを見ることができるというプライバシーの懸念が非常に高くなります。 ['password_hash()'](http://www.php.net/password_hash)と['' password_verify() '](http://www.php.net/password_verify)を使ってパスワードをハッシュしたままにすることができます暗号化不可)をデータベースに保存します。 PHPのバージョンが5.5未満の場合は、PHP> = 5.3.7で動作する[password_compat](https://github.com/ircmaxell/password_compat)を使用できます。お使いのバージョンが古い場合は、2014年8月にサポートを5.3に戻してインストールをアップグレードする必要があります。 – h2ooooooo
ありがとうございます。次回はそのことを覚えておいてください。 – Jerlon