繁体   English   中英

从mysql查询php创建数组

[英]create array from mysql query php

我有一点我不明白的问题。 我有一个拥有所有者和类型的数据库(当然还有更多)。 我想得到一个列表,其中包含所有者等于当前用户的所有类型值,但我只得到两个结果

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

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

通常这是在while循环中完成的:

$types = array();

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

看一下文档中的示例。

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

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

这就是while循环工作的原因。 如果没有任何行, $row将为false并且while循环存在。

似乎mysql_fetch_array只有多行,因为默认情况下它会获得正常的结果关联值

通过使用MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。

您的示例最佳显示,您获得相同的值18 ,您可以通过$v[0]$v['type']访问它。

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

你需要迭代......

$typeArray = array();
$query = "select * from whatever";
$result = mysql_query($query);

if ($result) {
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type'];
}

您可能想查看Wikipedia上的SQL注入文章。 查看“十六进制转换”部分,找到一个小函数来执行SQL命令并返回包含其中信息的数组。

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

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

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

您还可以使用包装器使生活更轻松,例如使用ADODb:

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

一个好的包装器也会为你做所有的逃避,让事情更容易阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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