我试图找出从我的数据库中获取数据的正确方法。这两种方法都有效,但有什么不同?一个深入的解释?
$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]";
}这是我一直想知道的。
发布于 2009-11-13 07:33:05
区别是在第一个例子中重新分配变量。但你可以说:
while(list($username, $password) = mysql_fetch_array($sql)) {
echo "$username:$password";
}或者你可以拿出一个哈希
while($row = mysql_fetch_assoc($sql)) {
echo "{$row['username']}:{$row['password']}";
}正确的方法取决于应用程序或您的偏好,我个人避免数字索引数组,除非我特别需要它们。谁想要保留一个心理标签,哪些数据在哪个索引中?
发布于 2009-11-13 07:31:10
不同之处在于,fetch_array提取一个包含数值索引和关联索引的数组(除非您提供了一个额外的选项来告诉它其他情况),而fetch_row只获取数值索引,而fetch_assoc只获取关联索引。通常,你不想两者兼得。
使用fetch_assoc而不是fetch_array -这只会为您提供一个具有关联索引的数组。这意味着它将运行得更快一些(必须少做一些工作),但是代码也同样清晰。
从功能的角度来看,差别是最小的。但是,前者存在的问题是,您从数据库中获取的比所需的更多(SELECT *)。一般建议不要选择比实际需要的更多。
发布于 2009-11-13 07:35:33
内部没有太大的差别。序号和列名在MySQL客户端API中的结果集元数据中都是可用的,不管如何。
关于使用,在不同的情况下两者都可以方便。按名称引用列更有帮助作用,结果是(半)自文档化代码,允许您更改查询中列的位置或数目,而不破坏代码等等。
但按顺序取有时也是一只手。例如:
SELECT u.name, d.name FROM user u JOIN department d USING (dept_id)现在,结果集中有两个名称相同的列。如果获取关联数组,则其中一个覆盖另一个数组,因为assoc数组每个键只能有一个值。因此,$row["name"]是其中之一,您不一定知道它将是哪一个。
SELECT d.name, COUNT(*) FROM user u JOIN department d USING (dept_id) GROUP BY dept_id现在您有了一个没有别名的列,根据您使用的RDBMS品牌,它可以自动创建一个看起来很有趣的别名,或者将整个表达式用作assoc数组的键。因此,在这种情况下,能够使用序号而不是列名是很好的。
(有趣的是,当我在写作时听StackOverflow播客时,我的写作风格变得更加随意和闲聊。)
https://stackoverflow.com/questions/1727672
复制相似问题