检查用户是否存在数据库错误

时间:2014-08-08 05:21:33

标签: php mysql database mysqli

我是php的新手,并且已经通过php学院关注youtube上的教程了。基本上它是一个允许登录,注册和记住我选项的脚本,教程是2年,所以我试图将一些mysql函数更改为mysqli但是我遇到了一些问题..当我进入一个用户名和命中登录我得到一个“mysql_num_rows()期望参数1是资源,在user.php第9行中给出的字符串”错误,我的if语句说“找不到用户名尝试注册“但它应该显示”存在“,因为我输入的用户名实际上是在数据库中..我很困惑,如果脚本不是最安全的话,也请原谅我,我知道事情应该被转义等等,你的帮助将不胜感激

User.php:

<?php

function user_exists($username)
{

$username=$username;
$query = ("SELECT count(`user_id`) FROM `users` WHERE `username`='$username'");

    if(mysql_num_rows($query)===1)
    {return true;

    } else{
        return false;
    }


}




?>

的login.php

<?php

    include ('core/init.php');


    if(user_exists('drellen')===true){
        echo "exists";

    }

    if(empty($_POST)===false){
        $username=$_POST['username'];
        $password=$_POST['password'];

        if(empty($username) === true|| empty($password)=== true)

        {

            echo $error[]="Enter a username and password";

        } 
            else if (user_exists($username)===false) 

            {
            echo $error[]="Cannot find username try registering";
            }




    }

请注意,init.php中包含了users.php ***** 可能混合了旧的mysql和新的mysqli函数混合在一起,帮助使它充满mysqli将不胜感激

3 个答案:

答案 0 :(得分:1)

您尚未使用mysql_query()来运行查询。如何获得没有它的行数。

注意 - &gt;您应该使用mysqli_*函数代替mysql_*

$query = mysqli_query("SELECT count(`user_id`) FROM `users` WHERE `username`='$username'");
//$row = mysqli_fetch_array($query);
$count = mysqli_num_rows($query);

答案 1 :(得分:1)

你可以试试这个

function user_exists($username)
{
    $result = mysql_query("SELECT `user_id` FROM `users` WHERE `username`='$username' LIMIT 1 ") or die(mysql_error());
    if($row = mysql_fetch_assoc($result))
    {
        return true;
    }
    else
    {
        return false;
    }
}

注意: mysql_*已弃用。使用mysqli_*PDO

更新2:

    function user_exists($username)
    {
        global $your_db_conn;
        $sql = "SELECT `user_id` FROM `users` WHERE `username`='$username' LIMIT 1 ";
        $result = mysql_query($sql, $your_db_conn) or die(mysql_error());
        if($row = mysql_fetch_assoc($result))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

答案 2 :(得分:-2)

这是一个可行的例子

经过一番挖掘之后,我发现此新函数中最重要的部分是调用全局$ db ,并用于清理添加的$db, $data和查询中的内容。如果您查找使用mysqli_query($db, $sql);的其他基本方法,就会很容易地掌握到这一点

<?php
    
    $db = mysqli_connect('localhost', 'root', 'password', 'database');

    function sanitize($data) {
        global $db;
        return mysqli_real_escape_string($db, $data);
    }

    function user_exists($username)
    {
        global $db;
        $username = sanitize($username);
        $sql = "SELECT `id` FROM `Users` WHERE `username`='$username' LIMIT 1";
        $result = mysqli_query($db, $sql) or die('query');
        if($row = mysqli_fetch_assoc($result))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

?>
<h1>test</h1>

<?php



if (user_exists('admin') === true){
 echo "Good news, this exists";
} else {
    echo "no good";
}

?>