SQL在php管理中工作,但在php代码中返回空结果


SQL works in php admin but returns empty result in php code

这是我的代码:

  $usersql = "Select fab2_type from feesys_admin where adminname ='$_POST[username]' and adminemail = '$_POST[password]'";
        $userresult = mysql_query($usersql) or die ("<h3>Error in query: $query. ".mysql_error()."</h3>");
        $num_rows = mysql_num_rows($userresult);
        if($num_rows > 0) {
            if($userresult['fab2_type']=='Partner'){
        }

当我通过PHP Admin在数据库上运行SQL语句时,它运行得很好。但它在此处的结果中返回空。

我检查了一下以确保数据库连接良好。我检查了所有拼写正确返回的行数。没有语法错误。当我回显用户名和密码以及sql语句时,一切都是正确的。

这个代码以前是有效的,所以我不知道这里出了什么问题。

这是因为您没有正确引用$_POST数组变量。您有$_POST[username]$_POST[password]。它应该是$_POST['username']$_POST['password']。这导致PHP将用户名和密码解释为常量

这里有一个不同的语法镜头-

$usersql = "SELECT `fab2_type` FROM `feesys_admin` WHERE `adminname` ='".$_POST['username']."' AND `adminemail` = '".$_POST['password']."' ";

您可以通过预定义(正如Fred在下面所说)来进一步缩短此时间。

$user = $_POST['username']; // please sanitize this
$pass = $_POST['password']; // please sanitize this
$usersql = "SELECT `fab2_type` FROM `feesys_admin` WHERE `adminname` ='".$user."' AND `adminemail` = '".$pass."' ";

如果不清理用户输入,SQL注入的风险就很大。

  • 请参阅以下关于堆栈的内容:如何防止SQL注入

密码相关

我注意到你可能在以纯文本存储密码。如果是这样的话,我们强烈反对。

我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()函数
对于PHP<5.5使用password_hash() compatibility pack

此外,关于SQL注入,mysqli与已准备好的语句一起使用,或者使用PDO与已准备的语句一起它们更安全