2012-01-27 81 views
0
$query = mysql_query("SELECT `id`, `username` FROM `users` WHERE `username` = 'admin' LIMIT 1"); 
if (mysql_num_rows($query)) 
{ 
    $row = mysql_fetch_array($query); 
    $userid = $row['id']; 
} 

我需要获得用户ID这么快。 我如何缩小这段代码?我经常使用相关的查询。 谢谢!PHP MySQL的5减少查询

回答

1

您查询是几乎没有什么可以做,除了最小化你不需要让你的where子句中username领域这已经是知道的。如果没有记录,则mysql_fectch_assoc()将返回false,因此您不需要使用mysql_num_rows()

$query = mysql_query("SELECT `id` FROM `users` WHERE `username` = 'admin' LIMIT 1"); 
$row = mysql_fetch_assoc($query); 
if ($row) { 
    $userid = $row['id']; 
} 
0

试着问MySQL来解释你的查询:

EXPLAIN SELECT `id`, `username` FROM `users` WHERE `username` = 'admin' LIMIT 1 

并遵循响应,以优化您的要求


使用的PrimaryKey以选择该行或一组用户名作为INDEX

1

如果您只需要id,那么在SELECT中只包含id。如果username是独一无二的,你不需要LIMIT

SELECT `id` FROM `users` WHERE `username` = 'admin' 

如果id是你的主键,然后确保你username有一个索引。

如果您没有使用行计数,那么请跳至mysql_num_rows()。此外,只返回数字指标与mysql_fetch_row()可能会帮助一些:

$query = mysql_query("SELECT `id` FROM `users` WHERE `username` = 'admin'"); 
if ($query) 
{ 
    $row = mysql_fetch_row($query); 
    if($row) { 
     $userid = $row[0]; 
    } 
} 
0

我的sugesstion是把它包装在一个函数中(获取id)。 我订阅了其他人对查询中有关mysql_num_rows和用户名的评论。

function get_uid($username); 
{ 
    $query = mysql_query("SELECT `id` FROM `users` WHERE `username`='{$username}' LIMIT 1"); 
    return ($row = mysql_fetch_assoc($query)) ? $row['id'] : NULL; 
} 

和使用作为

$userid = get_uid('admin'); 

,如果你从什么地方得到的输入,逃避用户名。