PHP/MySQL MySQL\u num\u行不返回值

PHP/MySQL MySQL\u num\u行不返回值,php,mysql,Php,Mysql,我对PHP和编程基本上是新手,但我正在做一个登录。我已经完成了注册页面,我的数据库很好地填充了记录。然而,当这个代码得到输出时,它说我有0行来自mysql_num_rows($result);。。。当我输入正确的用户名/密码时,它应该会成功返回显示1行。无论我是否输入了成功的user/pass组合,它都会输出相同的结果 感谢您提供的任何帮助,代码如下所示: $SQL = "SELECT * FROM account WHERE username = $username AND password

我对PHP和编程基本上是新手,但我正在做一个登录。我已经完成了注册页面,我的数据库很好地填充了记录。然而,当这个代码得到输出时,它说我有0行来自mysql_num_rows($result);。。。当我输入正确的用户名/密码时,它应该会成功返回显示1行。无论我是否输入了成功的user/pass组合,它都会输出相同的结果

感谢您提供的任何帮助,代码如下所示:

$SQL = "SELECT * FROM account WHERE username = $username AND password = md5($password)";
            $result = mysql_query($SQL);
            $num_rows = mysql_num_rows($result);
            echo $result;
            echo $num_rows;

            // CLOSE CONNECTION
            mysql_close($db_handle);

            // COMPARE $num_rows TO SEE IF A SUCCESSFUL LOGIN, THEN DIRECT TO MEMBERS PAGE

            if ($result) {
                if ($num_rows > 0) {
                    session_start();
                    $_SESSION['login'] = "1";
                    header ("Location: page1.php");
                }   
                    else {
                        $error_message = "Login failed.  Please try again.";
                        echo $num_rows;

编辑:完成重写

试试这个:

<?php



$host = "host";
$user = "user";
$password = "password";
$database = "database";


$username = 'jack'; /* Insert $_Post [''] here with username variable you pass. You could sanitize and validate with for example filter_var (), clean (), etc */
$password_user = 'password from jack'; // same here.

$link = mysqli_connect($host, $user, $password, $database);
        IF (!$link){
        echo ("Unable to connect to database!");
        }

        ELSE{
$query = "SELECT * FROM account WHERE username ='$username' AND password = md5('$password_user')";
            $result = mysqli_query($link, $query);
            $num_rows = mysqli_num_rows($result);
            $row = mysqli_fetch_array($result, MYSQLI_BOTH);

            // COMPARE $num_rows TO SEE IF A SUCCESSFUL LOGIN, THEN DIRECT TO MEMBERS PAGE

            if ($row) {
                    session_start();
                    $_SESSION['login'] = "1"; // pleae not that 1 is converted into a string value
                    $_SESSION['username'] = $username; // added username, just to test.
                    header ("Location: page1.php");
                }   
                    else {
                        $error_message = "Login failed.  Please try again.";
                        echo $error_message;
                    }
            // CLOSE CONNECTION
            mysqli_close($link);            
        }
?>

样本页1

<?php
session_start();
$login = $_SESSION['login'];
$username = $_SESSION['username'];

echo '<h1>It WORKS, <i>'.$username.'</i>!!!</h1>';


?>

需要注意的是,我使用了MYSQLI库而不是MYSQL库。如果表中有多个列,则应选择每列的输出。例如,
$result['id']

我发现您并没有在SQL语句中转义变量。我必须注意,我没有调试下面的部分:比较$num_行以查看是否成功登录,然后直接登录到成员。我想你可以自己处理


W.R.T.santization和validation你还需要做更多的工作。我不知道您的数据是如何通过用户登录表单传递的。假设您将使用POST。在这种情况下,您可以从页面顶部开始,首先使用$\u POST检索所有已发布的变量。然后对它们进行过滤,确保您的代码没有打开以进行SQL注入。例如,
$username=filter\u var($\u POST['username'],filter\u SANITIZE\u STRING)

。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,.
$username
$password
都应该是带引号的字符串。如果它们来自输入,希望它们至少已经用
mysql\u real\u escape\u string()
清理过。打开错误报告,您可能会看到
mysql\u num\u rows()期望参数1是资源,给定的布尔值
。Do:
错误报告(E_ALL);ini设置(“显示错误”,1)@johncode:这家伙显然是在学习使用一些示例脚本&而不是为生产环境创建代码的人。这些咄咄逼人的
请不要在新代码中使用mysql_*函数。
消息非常疏远和咄咄逼人。还有一点
133t
。让人们学习基本概念&也许回答手边的问题,然后解释一下
mysql.*
函数被贬值了,但很严重。冷静点。@JakeGould为什么你说这不是生产代码?对我来说,它看起来像是生产中使用的东西。更不用说学习过时的技术不是明智的选择。学习你应该使用的东西。不是你应该忘记的东西。激进:我正在通过POST传递它,我正在对它进行消毒。我使用了你粘贴的代码,但仍然得到:警告:mysqli_num_rows()期望参数1是mysqli_result,在第53行的C:\xampp\htdocs\fun\login\login.php中给出的布尔值谢谢你的帮助,如果没有这个,我会迷路的。“MYSQL库而不是MYSQL库”?什么?回答问题和解释MySQLI与MySQL调用的最佳方式。@Mr.radial如果我不知道您想要什么库,我就不知道了。我首先假设PDO,但是有几个库。
<?php
session_start();
$login = $_SESSION['login'];
$username = $_SESSION['username'];

echo '<h1>It WORKS, <i>'.$username.'</i>!!!</h1>';


?>