2017-10-22 5 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.phphttp://php.net/manual/en/pdostatement.rowcount.php

또한, 프레임 워크 또는 적어도 ORM을 사용하여 목표를 지원하는 것이 좋습니다. 그렇지 않으면 수행 된 기능을 구현하는 데 많은 시간을 낭비하기 때문입니다. ORM의 경우 Doctrine은 좋은 선택이며 Laravel은 시작하기 쉬운 프레임 워크라고 생각합니다. 내가 너를 도울 수 있기를 바란다.

+0

대단히 고마워, 효과가 있었고, Doctrine and Laravel을 확인해 보겠다! –