从mysql查询php创建数组

Posted

技术标签:

【中文标题】从mysql查询php创建数组【英文标题】:create array from mysql query php 【发布时间】:2011-03-25 19:46:57 【问题描述】:

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

$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 查询来获得所有类型的值。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案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

【讨论】:

是的!这是正确的方式。 他没有使用 mysqli 他使用的是旧版 mysql 旧版 mysql?您一定是指已弃用的 Mysql。 是的 旧 mysql - 比答案相关的版本旧【参考方案3】:
$type_array = array();    
while($row = mysql_fetch_assoc($result)) 
    $type_array[] = $row['type'];

【讨论】:

【参考方案4】:

这通常在while 循环中完成:

$types = array();

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

查看documentation 中的示例。

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

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

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

似乎mysql_fetch_array 得到的结果不止一行,因为默认情况下它得到的结果为normal and as associative value:

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

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:
while($row = mysql_fetch_assoc($result)) 
  echo $row['type'];

【讨论】:

他的代码已经在这样做了。他希望它变成一个数组。回声并不能解决这个问题。【参考方案7】:

您确实需要遍历...

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

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

【讨论】:

以上是关于从mysql查询php创建数组的主要内容,如果未能解决你的问题,请参考以下文章

php mysql 查询

从数组 MySQL 和 PHP 构建插入查询

从数据数组(php,mysql)编写循环sql查询

从 MySQL 结果创建 PHP 数组

PHP 从MySQL查询返回数组

从循环查询 PHP MYSQL JSON 合并数组