繁体   English   中英

使用mysql_query和mysql_fetch_array

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM