逻辑PHP / SQL Server出错

时间:2011-04-17 20:48:52

标签: php sql sql-server logic

我有一个逻辑错误我不能为我的生活弄清楚。问题是我写的这个非常基本的登录页面总是输出默认答案,而不是从表中选择。

我正在尝试将E_Type中的值返回给php,在这种情况下,该值应返回A,但不是。

我做错了什么?

代码:

<?php
$server   = -Removed;
$login    = -Removed;            
$pass     = -Removed;        
$login    = $_POST['login'];
$password = $_POST['password'];
$table    = 'USERPASS';
$table2   = 'EMPLOYEES';
$res      = 'q';

$dblink = @mssql_connect(-Removed) or die("Error 1");
mssql_select_db('group5', $dblink) or die( "unable to select the database");

$sqlquery = "SELECT E_TYPE FROM USERPASS U, EMPLOYEES E WHERE U.EMPLOYEE_ID = E.EMPLOYEE_ID AND PASSWORD = '$password' AND USERNAME = '$login'";
$res = mssql_query($sqlquery, $dblink) or die("Error5");
$count = mssql_num_rows($res);

if($count==1)
{
    if ($res == "A" )
    {
        echo "Success 1";
    }
    else if ($res == "B" )
    {
        echo "Success 2";
    }
    else
    {
        echo "Error...";
    }
}
?>

3 个答案:

答案 0 :(得分:1)

您需要先获取结果。在$res中,您基本上只有一个可以迭代结果的结果句柄。

使用mssql_fetch_assoc获取结果并访问它们(这会遍历所有结果行):

while(($row = mssql_fetch_assoc($res)) !== FALSE) {
    echo $row['E_TYPE'];
}

在您的情况下(如果您只想要一行)请使用:

if($count == 1) {
    $row = mssql_fetch_assoc($res);
    if ($row['E_TYPE'] == "A" )
    {
        echo "Success 1";
    }
    else if ($row['E_TYPE'] == "B" )
    {
        echo "Success 2";
    }
    else {
        echo "Error...";
    }

}

答案 1 :(得分:1)

mssql_query返回MS SQL结果集,要获取返回值,必须先从此结果集中获取行。请参阅http://www.php.net/manual/en/function.mssql-fetch-assoc.php和其他mssql_fetch函数

答案 2 :(得分:0)

<?php
$server = -Removed;
$login = -Removed;           
$pass = -Removed;        
$login=$_POST['login'];
$password=$_POST['password'];
$table= 'USERPASS';
$table2='EMPLOYEES';
$res='q';

$dblink = @mssql_connect(-Removed) or die("Error 1");
mssql_select_db('group5', $dblink) or die( "unable to select the database");
$sqlquery = "SELECT E_TYPE FROM USERPASS U, EMPLOYEES E WHERE U.EMPLOYEE_ID = E.EMPLOYEE_ID AND PASSWORD = '$password' AND USERNAME = '$login'";
$res = mssql_query($sqlquery, $dblink) or die("Error5");
$count=mssql_num_rows($res);
    if(1 == $count){
        $row=mssql_fetch_assoc($res);//fetch row from database
        switch($row['E_TYPE']) {
            case "A":
                echo "Success 1"; 
                break;
            case "B":
                echo "Success 2"; 
                break;
            default:
                echo "Error..."; 
                break;
        }
    }
}
mssql_free_result($res);
?>

你应该了解select ... case语句。 我唯一能看到的就是你角色的情况。数据库可能是也可能不区分大小写。 你也遗漏了一些有时会影响结果的东西:mysql_free_result()。 你应该通常做一个关于获取行而不是if的while语句,因为可能有超过1行。

我通常在比较运算符之前将常量和右侧的变量放在可能的情况下并且它是有意义的,因为如果在任何情况下由于缺少=而成为赋值,编译器将捕获错误。