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

从mysql query php创建数组

  •  5
  • ganjan  · 技术社区  · 14 年前

    我有个小问题,我不明白。我有一个数据库,它有一个所有者和类型(还有更多的非课程)。我想得到一个拥有者等于当前用户的所有类型值的列表,但是我只得到两个结果

    $sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' ORDER BY id DESC "; 
    
     $result = mysql_query($sql,$con); 
    
     print_r(mysql_fetch_array($result));
    

    打印输出:

    Array ( [0] => 18 [type] => 18 )
    

    $sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' "; 
    

    打印输出:

    Array ( [0] => 16 [type] => 16 ) 
    

    结果应该是数组中的19,19,18,17,16。所有的类型都把我设定为拥有者。

    我现在已经开始工作了:

    for ($x = 0; $x < mysql_num_rows($result); $x++){
     $row = mysql_fetch_assoc($result);  
     echo $row['type']; 
    }
    

    在这里,我正确地打印出所有值,但我需要创建一个包含所有值的数组。我虽然可以使用数组推,但大多数情况下都有更好的方法。我想我可以通过一个简单的mysql查询得到所有类型值。

    7 回复  |  直到 9 年前
        1
  •  22
  •   Felix Kling    14 年前

    这通常是在 while 循环:

    $types = array();
    
    while(($row =  mysql_fetch_assoc($result))) {
        $types[] = $row['type'];
    }
    

    请看中的示例 documentation .

    这个 mysql_fetch_* 方法将始终获得 下一个 结果集的元素:

    返回与提取的行对应的字符串数组,如果没有更多的行,则返回false。

    这就是为什么 虽然 循环工作。如果再也没有行的话 $row false 以及 虽然 循环存在。

    只是看起来 mysql_fetch_array 获取多行,因为默认情况下,它的结果为 normal and as associative value :

    通过使用mysql-both(默认),您将得到一个同时具有关联索引和数字索引的数组。

    您的示例最好地显示了它,您得到相同的值 18 你可以通过 $v[0] $v['type'] .

        2
  •  2
  •   Fosco    14 年前

    你确实需要重复…

    $typeArray = array();
    $query = "select * from whatever";
    $result = mysql_query($query);
    
    if ($result) {
        while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type'];
    }
    
        3
  •  2
  •   David rakar    11 年前
    THE CORRECT WAY ************************ THE CORRECT WAY
    
    while($rows[] = mysqli_fetch_assoc($result));
    array_pop($rows);  // pop the last row off, which is an empty row
    
        4
  •  0
  •   Codler    14 年前
    while($row = mysql_fetch_assoc($result)) {
      echo $row['type'];
    }
    
        5
  •  0
  •   Paul Dixon    14 年前

    使用包装器也可以使生活更轻松,例如,使用ADODB:

    $myarray=$db->GetCol("SELECT type FROM cars ".
        "WHERE owner=? and selling=0", 
        array($_SESSION['username']));
    

    一个好的包装器也可以帮你完成所有的转义,使事情更容易阅读。

        6
  •  0
  •   Treffynnon    12 年前
    $type_array = array();    
    while($row = mysql_fetch_assoc($result)) {
        $type_array[] = $row['type'];
    }
    
        7
  •  0
  •   Mark Manning    9 年前

    你可能想去看看维基百科上的SQL注入文章。在“十六进制转换”部分下查找一个小函数来执行SQL命令,并返回一个包含信息的数组。

    https://en.wikipedia.org/wiki/SQL_injection

    我编写dosql()函数是因为我厌倦了让我的SQL命令到处执行,忘记检查错误,并且能够将我的所有命令记录到一个日志文件中以便以后查看(如果需要的话)。这个程序对于任何想用它做任何用途的人都是免费的。实际上,我对函数做了一些扩展,因为我希望它做得更多,但是这个基本函数是从SQL调用中获取输出的一个很好的起点。