2017-10-22 4 views
-1

PHPで何か新しいことをしようとしています。MYSQLデータベースの行を数えています。 しかし、echo $rowsを入力するとすぐにエラーが吐き出されます。PHP7でmysql_num_rowsが動作しません

誰かお手伝いできますか?

ここに私のログインコードがあります。

<?php 
    'include('classes/DB.php'); 

if (isset($_POST['login'])) { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 

     if (DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) { 
      // if (DB::query('SELECT token FROM login_tokens WHERE user_id=1')<=5) { 
       if (password_verify($password, DB::query('SELECT password FROM users WHERE username=:username', array(':username'=> $username))[0]['password'])) { 
         echo 'Logged in!'; 
         $query = DB::query('SELECT * FROM login_tokens WHERE user_id=:user_id', array(':user_id'=>$user_id)); 
         $rows = mysql_num_rows($query); 
         echo $rows; 
         $cstrong = True; 
         $token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)); 
         $user_id = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id']; 
         DB::query('INSERT INTO login_tokens VALUES (0, :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$user_id)); 

         setcookie("SNID", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE); 
         setcookie("SNID_", '1', time() + 60 * 60 * 24 * 3, '/', NULL, NULL, TRUE); 

       } else { 
         echo 'Incorrect Password!'; 
       } 
       // } else { 
         // echo 'You already logged in on 5 different devices!' 
       // } 

     } else { 
       echo "User not registered! Create account <a href='http://follome.ddns.net/create-account.php'>here</a>!"; 
     } 

} 

?> 
<h1>Login to your account</h1> 
<form action="login.php" method="post"> 
<input type="text" name="username" value="" placeholder="Username ..."><p /> 
<input type="password" name="password" value="" placeholder="Password ..."><p /> 
<input type="submit" name="login" value="Login"> 
</form> 

そして、私のDBクラス:

<?php 
class DB { 

     private static function connect() { 
      $pdo = new PDO('mysql:host=127.0.0.1;dbname=socialnetwork;charset=utf8', 'root', 'Daan0109'); 
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      return $pdo; 
     } 

     public static function query($query, $params = array()) { 
       $statement = self::connect()->prepare($query); 
       $statement-> execute($params); 

       if (explode(' ', $query)[0] == 'SELECT') { 
        $data = $statement->fetchAll(); 
        return $data; 
       } 

     } 

} 
+0

私たちにあなたが得たエラーを教えてください – Wndrr

答えて

0

あなたは、DBの拡張(PDO、mysqliのは、MySQL)を混在させることはできません。さらに、mysqlは廃止され、php7で削除されました。

あなたはmysql_num_rows()

http://php.net/manual/de/pdostatement.rowcount.php

のPDOバリアントを使用する必要がありますしかし、あなたはこれを呼び出すためにPDOStatementオブジェクトが必要です。それ以外の場合は、常にfetchAll()を返すだけで簡単に使用できます。count()

+0

ありがとう、それは働いた! –

0

PDOを使用しているため、その行数で行番号を確認する必要があります。 http://php.net/manual/en/pdostatement.rowcount.php

また、フレームワークまたは少なくともORMを使用して目標をサポートすることをお勧めします。そうしないと、機能が実装されていないため、多くの時間を費やすことになります。 ORMの場合、Doctrineは良い選択であり、Laravelは簡単に開始できるフレームワークだと思います。私はあなたを助けることができれば幸いです。

+0

ありがとう、それは働いた、私は行くとDoctrineとLaravelをチェック! –

関連する問題