代码之家  ›  专栏  ›  技术社区  ›  homework

使用mysql_query和mysql_fetch_数组

  •  2
  • homework  · 技术社区  · 15 年前

    我正试图找出从我的数据库中获取数据的正确方法。不管哪种方法都有效,但有什么区别;一个深入的解释?

    $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]";
    }
    

    这是我一直想知道的。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Rob    15 年前

    区别在于,您要在第一个示例中分配变量。但你可以说:

    while(list($username, $password) = mysql_fetch_array($sql)) {
        echo "$username:$password";
    }
    

    或者你可以拔出一个土豆泥

    while($row = mysql_fetch_assoc($sql)) {
        echo "{$row['username']}:{$row['password']}";
    }
    

    正确的方法取决于应用程序或您的偏好,我个人避免使用数字索引数组,除非我特别需要它们。谁想试着在哪个索引中记录数据?

        2
  •  3
  •   Michael Madsen    15 年前

    不同的是,fetch_array提取一个同时包含数值索引和关联索引的数组(除非您提供了一个额外的选项来告诉它),而fetch_row只获取数值索引,fetch_assoc只获取关联索引。通常情况下,你不想两者兼得。

    使用fetch_assoc而不是fetch_array-它只为您提供一个具有关联索引的数组。这意味着它将运行得更快(它必须做更少的工作),但代码将同样清晰。

    从功能的角度来看,差异是最小的。但是,前者有一个问题,即从数据库中获取的数据比需要的多(select*)。通常建议不要选择超出实际需要的内容。

        3
  •  3
  •   Bill Karwin    15 年前

    内部没有什么区别。不管怎样,在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播客时,我的写作风格变得更加随意和健谈。)

    推荐文章