mysql_num_rows 不适用于 PHP7
mysql_num_rows won't work in PHP7
我正在尝试在 PHP 中做一些新的事情,对 MYSQL 数据库中的行进行计数。
但是只要我把 echo $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>
还有我的数据库class:
<?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;
}
}
}
您不能混合使用数据库扩展名(PDO、mysqli、mysql)。此外,mysql 已弃用并在 php7 中删除。
您应该使用 mysql_num_rows()
的 PDO 变体
http://php.net/manual/de/pdostatement.rowcount.php
但是你需要 PDOStatement 对象来调用它。否则,如果你总是 return fetchAll()
,你可以只使用简单的 count()
因为你使用了PDO,所以你应该检查行号和它的行数。
http://php.net/manual/en/pdostatement.rowcount.php
此外,我建议您使用一个框架或至少一个 ORM 来支持您的目标,否则您将浪费大量时间来实现已经完成的功能。对于ORM我觉得Doctrine是一个不错的选择,Laravel是一个容易上手的框架。希望能帮到你
我正在尝试在 PHP 中做一些新的事情,对 MYSQL 数据库中的行进行计数。
但是只要我把 echo $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>
还有我的数据库class:
<?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;
}
}
}
您不能混合使用数据库扩展名(PDO、mysqli、mysql)。此外,mysql 已弃用并在 php7 中删除。
您应该使用 mysql_num_rows()
http://php.net/manual/de/pdostatement.rowcount.php
但是你需要 PDOStatement 对象来调用它。否则,如果你总是 return fetchAll()
,你可以只使用简单的 count()
因为你使用了PDO,所以你应该检查行号和它的行数。 http://php.net/manual/en/pdostatement.rowcount.php
此外,我建议您使用一个框架或至少一个 ORM 来支持您的目标,否则您将浪费大量时间来实现已经完成的功能。对于ORM我觉得Doctrine是一个不错的选择,Laravel是一个容易上手的框架。希望能帮到你