1

我有这些代码,它给了我一个错误“警告:mysql_num_rows() 期望参数 1 是资源”:

PHP:

<?php
@error_reporting(0);
@session_start();
@include("sql.php");
$log_error = "";

if(isset($_POST['send'])) {
$user = protect($_POST['username']);
$pass = protect($_POST['password']);
$q = mysql_query("SELECT * FROM login WHERE name = '".$user."' and pass = '".$pass."'",$sqlc);
$count = mysql_num_rows($q);

if($count > 0) {
    $_SESSION['username'] == $user;
    header('Location: index.php');
    $log_error = "0";
} else {
    $log_error = "1";
}
}
?>

HTML:

<table border="0">
        <form action="" method="post">
            <tr>
                <td colspan="2" style="width:100%;"><span>Login</span></td>
            <tr>
            <tr>
                <td>Username:</td>
                <td><input type="text" name="username" value="" /></td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type="password" name="password" value="" /></td>
            </tr>
            <tr>
                <td colspan="2" style="width:100%;"><input type="submit" name="send" value="Login" /></td>
            </tr>
            </form>
        </table>

和 SQL 连接(sql.php):

<?php
$Host = 'localhost';
$User = 'dash_sys1';
$Pass = '123456Ben';
$DB = 'dash_sys1';

$sqlc = mysql_connect($Host,$User,$Pass) or die(mysql_error());
mysql_select_db($DB) or die(mysql_error());
function protect($str) {
return htmlspecialchars(mysql_real_escape_string(trim($str)));
}
?>

它给了我这个错误:警告:mysql_num_rows() 期望参数 1 是资源,在第 11 行的 C:\wamp\www\cms\admin\login.php 中给出的布尔值

我做错了什么?

4

2 回答 2

0

我唯一可以建议的事情如下,切换到 MySqli,它比普通的 mysql 更容易使用。

此外,您的查询似乎与应有的相反,请尝试执行以下操作:

$q = mysql_query($sqlc, "SELECT * FROM login WHERE name = '".$user."' and pass = '".$pass."'");

试试看,如果不起作用,请告诉我!

于 2013-10-07T16:14:37.667 回答
0

警告:mysql_num_rows() 期望参数 1 是资源,给定的布尔值

这意味着您将非资源传递给函数。那么为什么 $q 会是非资源呢?如果您的 SQL 查询或函数的使用有错误,mysql_query() 函数将返回一个布尔假值。因此 $q 被分配了 false 值,而不是查询结果资源。然后你将 $q 传递给 mysql_num_rows() ,这是行不通的。

您应该始终检查 mysql_query() 的返回值是否存在错误结果。

$q = mysql_query("SELECT * FROM login WHERE name = '".$user."' and pass = '".$pass."'",$sqlc);
if ($q === false) {
    trigger_error(mysql_error($sqlc), E_USER_ERROR);
} else {
    $count = mysql_num_rows($q);
}
于 2013-10-07T16:26:00.197 回答