【问题标题】:Query for id lookup based off of user email根据用户电子邮件查询 id 查找
【发布时间】:2011-08-06 13:01:19
【问题描述】:

有人能给我一个 MySQL 关系查询,用于根据同一张表的另一个值查找表的列值吗?

例如,我有一个包含 4 列(id、name、email、password)的表。如何根据“电子邮件”列中的电子邮件查找某个用户的“id”列的值并将结果(id)存储在变量中?

这里是 session() 控制器函数

function userIsLoggedIn()
{
    if (isset($_POST['action']) and $_POST['action'] == 'login')
    {
        if (!isset($_POST['email']) or $_POST['email'] == '' or
            !isset($_POST['password']) or $_POST['password'] == '')
        {
            $GLOBALS['loginError'] = 'Please fill in both fields';
            return FALSE;
        }

        $password = md5($_POST['password'] . 'chainfire db');

        if (databaseContainsAuthor($_POST['email'], $password))
        {
            session_start();
            $_SESSION['loggedIn'] = TRUE;
            $_SESSION['email'] = $_POST['email'];
            $_SESSION['password'] = $password;
            $_SESSION['authorid'] = $author;
            return TRUE;
        }
        else
        {
            session_start();
            unset($_SESSION['loggedIn']);
            unset($_SESSION['email']);
            unset($_SESSION['password']);
            unset($_SESSION['authorid']);
            $GLOBALS['loginError'] =
                    'The specified email address or password was incorrect.';
            return FALSE;
        }
    }

我试过了

SELECT id FROM article WHERE email='$email' 

有没有更有效的方法来做到这一点?我也不完全确定如何将查询结果存储在$author 会话变量中。

提前致谢。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您的查询是完美的(前提是您正在清理 $email 变量 - 请参阅 Little Bobby Tables 的故事)。

    SELECT id FROM article WHERE email='$email'
    

    执行该查询并将变量 $author 设置为返回值很简单:

    $author = 0;
    if( ( $idFromEmail = @mysql_query( "SELECT id FROM article WHERE email='".mysql_real_escape_string( $email )."'" ) )
        && mysql_num_rows( $idFromEmail )==1
        && ( $r = mysql_fetch_assoc( $idFromEmail ) ) ){
        $author = $r['id'];
    }
    

    重写为长格式,如果上面的内容太复杂而无法理解:

    $author = 0;
    if( !( $idFromEmail = @mysql_query( "SELECT id FROM article WHERE email='".mysql_real_escape_string( $email )."'" ) ){
      // SQL Query Failed
    }elseif( mysql_num_rows( $idFromEmail )!=1 ){
      // More than, or less than, one row returned
    }else{
      $r = mysql_fetch_assoc( $idFromEmail );
      $author = $r['id'];
    }
    

    【讨论】:

    • 我建议你把每一段代码都写在单独的一行,这样代码的可读性就更好了,即$idFromMail = mysql_query(...); if(mysql_num_rows(...)==1){ $r=mysql_fetch...; $author = $r['id']; }
    • 同意。通常我会,我只是想我会在这里尝试一些新的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多