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 がリソースであると想定しています。

私は何を間違えましたか?

4

2 に答える 2

0

警告: mysql_num_rows() は、パラメーター 1 がリソースであると想定しています。ブール値が指定されています

これは、非リソースを関数に渡したということです。では、なぜ $q が非リソースになるのでしょうか? mysql_query() 関数は、SQL クエリまたは関数の使用にエラーがある場合、ブール値falseを返します。したがって、$q には、クエリ結果のリソースではなく、false の値が割り当てられます。次に $q を mysql_num_rows() に渡しますが、これはうまくいきません。

false の結果については、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 に答える
0

私が提案できる唯一のことは次のとおりです.MySqliに切り替えてください.通常のmysqlよりもはるかに簡単に操作できます.

また、クエリが逆になっているようです。次のことを試してください。

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

試してみて、うまくいかない場合はお知らせください。

于 2013-10-07T16:14:37.667 に答える