我想做这样的事情:
$query=mysql_query("SELECT userid FROM users WHERE username='$username'");
$the_user_id= .....
因为我想要的只是与用户名对应的用户ID。
通常的方式是:
$query=mysql_query("SELECT * FROM users WHERE username='$username'");
while ($row = mysql_fetch_assoc($query))
$the_user_id= $row['userid'];
但这有什么更有效的吗? 非常感谢,问候
答案 0 :(得分:13)
你的头上钉了一针:你想要做的是SELECT userid FROM users WHERE username='$username'
。试试吧 - 它会起作用:)
SELECT *
几乎总是一个坏主意;最好指定希望MySQL返回的列的名称。当然,您仍然需要使用mysql_fetch_assoc
或类似的东西来实际将数据转换为PHP变量,但至少这样可以节省MySQL发送您不会使用的所有这些列的开销。< / p>
另外,您可能希望使用较新的mysqli库或PDO。这些也比旧的mysql库更有效,旧的mysql库已被弃用。
答案 1 :(得分:4)
不仅可以,而且你应该。不幸的是,太多的年轻开发人员养成了选择太多数据的习惯。运行查询后,您不需要执行while循环,因为您只有一条记录返回。相反,只需使用以下内容:
$sql = sprintf( "SELECT userid FROM users WHERE username = '%s'", $username );
$result = mysql_query( $sql ) or die( mysql_error() );
$data = mysql_result( $result, 0 );
if ( $data ) echo $data; // first userid returned
mysql_result()
的第二个参数是您要检索的行索引。 0是第一个。
答案 2 :(得分:3)
“通常”的方式是仅选择您需要的列。
任何属于select且不需要的列都会降低检索速度。部分原因是网络流量,部分原因是如果只选择了某些列,数据库引擎可以应用某些优化。
select *
通常在生产代码中不受欢迎。
答案 3 :(得分:3)
您的查询是正确的:
$query = mysql_query("SELECT userid FROM users WHERE username='$username'");
如果正确完成,这将。请注意,必须使用$username
正确转义mysql_real_escape_string
。我建议查看参数化查询,以降低引入SQL注入不可侵犯性的风险。
您可以更改的另一件事是使用mysql_result
代替您的循环:
$the_user_id = mysql_result($result, 0);
这假定知道你只会得到一行。
答案 4 :(得分:1)
是的,这是一个很棒的优化练习!
此外,如果您想更进一步并进行超级优化,请尝试添加LIMIT,如下所示:$query=mysql_query("SELECT userid FROM users WHERE username='$username' LIMIT 1");
当然,这假设您只希望返回一个用户ID,并且一旦找到它就会使数据库引擎停止。
但是,最重要的是:总是逃避/消毒您的输入数据! (不能强调这一点)
答案 5 :(得分:0)
您可以使用一行代码执行此操作
<head>
<script src="javascripts/jquery.js"></script>
<script src="javascripts/jquery-ui.min.js"></script>
<link rel="stylesheet" href="stylesheets/jquery-ui.css">
////////////// those are the scripts that i use in the function //////
<link rel="stylesheet" href="highlight.js/zenburn.css">
<link rel="stylesheet" href="stylesheets/css/theme-dark/annotorious-dark.css" />
<script src="highlight.js/highlight.pack.js"></script>
<script src="javascripts/annotorious.min.js"></script>
/////////////
<script>
$("#annotation").click(function() {
hljs.initHighlightingOnLoad();
//function of annotation
});
</script>
</head>
<body>
<button type="submit" id="annotation" >
<img src="stylo.png" style="width: 30px ; height:50px" alt="Submit">
</button>
</body>
在使用此
之前,您必须如下所示连接到数据库echo array_values(mysqli_fetch_array($mysqli->query("SELECT name FROM user WHERE id='$userid'")))[0];
的信用