带有mysqli\u real\u escape\u字符串的PHP无法按预期工作

带有mysqli\u real\u escape\u字符串的PHP无法按预期工作,php,Php,我试图创建一个登录页面,但我有一个问题,数据没有被发送。有人能帮我吗 $myusername = stripslashes($username); $mypassword = stripslashes($password); $myusername = mysqli_real_escape_string($myusername); $mypassword = mysqli_real_escape_string($mypassword); $sql="SELE

我试图创建一个登录页面,但我有一个问题,数据没有被发送。有人能帮我吗

  $myusername = stripslashes($username);
    $mypassword = stripslashes($password);
    $myusername = mysqli_real_escape_string($myusername);
    $mypassword = mysqli_real_escape_string($mypassword);

    $sql="SELECT * FROM login_admin WHERE user_name='$myusername' and user_pass=SHA1('$mypassword')";
    $result=mysql_query($dbC, $sql);
    // Mysql_num_row is counting table row
    $count=mysql_num_rows($result);
    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count==1){
        // Register $myusername, $mypassword and redirect to file "admin.php"
        session_register("admin");
        session_register("password");
        $_SESSION['name']= $myusername;
        header("location:admin.php");
    }
    else {

        $msg = "$username $password $myusername $mypassword $sql $result Wrong Username or Password. Please retry";
        header("location:login.php?msg=$msg");
    }
我得到的结果是:
test test123从登录管理中选择*,其中user\u name=\'\'和user\u pass=SHA1(\'\')的用户名或密码错误。请重试

您必须提供$link标识符作为中的第一个参数,以便这些行看起来更像

$myusername = mysqli_real_escape_string($dbconn,$myusername);
$mypassword = mysqli_real_escape_string($dbconn,$mypassword);
其中$dbconn是从
mysqli\u connect
返回的链接。如果要切换到mysqli_*函数集,则应该使用mysql_query和mysql_num_u行的mysqli_uu等价物

我强烈建议切换到mysqli(或PDO)而不是使用(现在是遗留的)mysql函数。PHP.net提供了原因。

考虑使用我们喜欢调用的(美妙的)东西。
它们之所以伟大,是因为它们将数据视为数据,而不是要执行的语句。这意味着不需要转义,因为您的输入不会被误解

要在您的案例中实现此功能,请执行以下操作:

我还写了一篇文章,将粘贴复制到登录系统中几乎可以实现任何功能的东西中(请参阅)

另外,为了回答您真正的问题,在没有数据库连接的情况下,在mysqli中没有这样的转义方法。将数据库添加到函数的开头:

mysqli_real_escape_string($db, $string);

mysqli
也准备了语句,我建议你使用它们。我也是,@Jack。转义可能会出现很多问题,因此最简单的方法就是不需要转义,让SQL引擎更智能(即在api中使用
Prepare
语句,而不是
Query
mysqli_real_escape_string($db, $string);