[英]Using mysql_query and mysql_fetch_array
我试图找出从我的数据库中获取数据的正确方法。 无论哪种方式都有效,但有什么不同; 一个深入的解释?
$sql = mysql_query("SELECT * FROM _$setprofile");
while($row = mysql_fetch_array($sql)) {
$username = $row['user'];
$password = $row['pass'];
echo "$username:$password";
}
与下面的功能...
$sql = mysql_query("SELECT user,pass FROM _$setprofile");
while($row = mysql_fetch_row($sql)) {
echo "$row[0]:$row[1]";
}
这是我一直想知道的。
不同之处在于您在第一个示例中重新分配变量。 但你可以这样说:
while(list($username, $password) = mysql_fetch_array($sql)) {
echo "$username:$password";
}
或者你可以拿出哈希
while($row = mysql_fetch_assoc($sql)) {
echo "{$row['username']}:{$row['password']}";
}
正确的方式取决于应用程序或您的偏好,我个人避免使用数字索引数组,除非我特别需要它们。 谁想尝试保留哪个数据在哪个索引中的心理标签?
区别在于fetch_array提取包含BOTH数字和关联索引的数组(除非你提供额外的选项来告诉它),而fetch_row只获取数字索引而fetch_assoc只获取关联索引。 通常,你不想要两者。
使用fetch_assoc而不是fetch_array - 只能获得一个带有关联索引的数组。 这意味着它会运行得更快(它必须做更少的工作),但代码将同样清晰。
从功能的角度来看,差异很小。 但是,前者存在的问题是,您从数据库中获取的数量超出了您的需求(SELECT *)。 通常建议不要选择超出实际需要的数量。
内部没有太大区别。 无论如何,MySQL客户端API中的结果集元数据都可以使用序号位置和列名称。
关于使用,两者在不同情况下都可以使用。 按名称引用列更具助记符,导致(半)自我记录代码,允许您在不破坏代码的情况下更改查询中的列的位置或数量等。
但有时候通过序数获取也是有用的。 例如:
SELECT u.name, d.name FROM user u JOIN department d USING (dept_id)
现在,结果集中有两个具有相同名称的列。 如果获取关联数组,则会覆盖另一个,因为关联数组每个键只能有一个值。 所以$row["name"]
是其中一个名字,你不一定知道它会是什么。
SELECT d.name, COUNT(*) FROM user u JOIN department d USING (dept_id) GROUP BY dept_id
现在你有一个没有别名的列,根据你使用的RDBMS品牌,它可以自动发明一个看起来很滑稽的别名,或者只使用整个表达式作为assoc数组的键。 因此,在这种情况下能够使用序号位置而不是列名称是很好的。
(当我在写作时,当我正在收听StackOverflow播客时,我的写作风格变得更加非正式和健谈,这很有趣。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.