2010-08-05 124 views
5

我有一个小问题,我不明白。我有一个拥有所有者和类型的数据库(以及更多课程)。我想所有的类型值的列表具有所有者等于当前用户,但我得到的只有两个结果从MySQL查询创建数组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查询来获取所有的类型值。

回答

22

很多时候,这是在while循环中完成:

$types = array(); 

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

已经在看例子documentation

mysql_fetch_*方法总是会得到结果集的下一个元素:

,如果没有更多的行返回字符串数组对应于提取行,或FALSE。

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

它只是似乎mysql_fetch_array得到多行,因为默认情况下它得到的结果作为normal and as associative value

通过使用MYSQL_BOTH(默认),你会得到与两个关联和数字索引的数组。

你的例子很好地说明它,你就会得到相同的值18并且你可以通过$v[0]$v['type']访问它。

2

你确实需要遍历...

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

if ($result) { 
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type']; 
} 
0
$type_array = array();  
while($row = mysql_fetch_assoc($result)) { 
    $type_array[] = $row['type']; 
} 
0
while($row = mysql_fetch_assoc($result)) { 
    echo $row['type']; 
} 
+0

他的代码已经这样做了。他希望它成为一个阵列。回声不会解决这个问题。 – Treffynnon 2010-08-05 13:55:44

0

您还可以使用包装材料使生活更轻松。与ADODb:

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

一个很好的包装将为你做所有的逃跑,使事情更容易阅读。

2
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 
+0

是的!这是正确的方法。 – 2013-07-23 01:13:56

+0

他是不是使用mysqli他使用的是传统的mysql – DropHit 2014-06-21 18:40:32

+2

传统的mysql?您必须表示已弃用的Mysql。 – 2014-06-23 00:45:28

0

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

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

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