在MySQL中将MySQL查询结果作为数组获取的最佳方法是什么?

时间:2011-11-02 01:13:22

标签: php mysql arrays

我是PHP的新手。我有一个select语句,返回特定记录的100个值。我想将这100个值存储在一个数组中。这是将我从select语句中获取的值存储到数组中的正确命令吗?

$result = mysql_query("select * from processed1 where record = ('$id') ");
$data = array();

while($row = mysql_fetch_array($result))
{           
   $data[] = $row;        //IS THIS CORRECT?
}

有没有办法可以避免输入我的表的100个属性?例如:$ row [1] ... $ row [100]

5 个答案:

答案 0 :(得分:4)


如果您打算在2011年学习PHP,那就让我们做吧。

首先,不推荐使用mysql_query或mysql_任何代码。不要再使用它了。

别担心 - 我建议使用的是mysql数据库,但它对任何数据库都有效:

  • PDO是PHP社区继续添加功能的,所以我会使用它。
  • PDO也更强大,以后可以更轻松地切换数据库。
  • MYSQLi(我代表改进)取代了已弃用的基于mysql_的查询,但我肯定会直接使用PDO。
  • 您还可以轻松创建数组 稍后改变一行的对象!

其次,Phil提到了fetchAll()。这是最终目标。其他方式一次只能移动一行。这使用推土机而不是铲子。注意:不是选择真正大量数据的最佳方式,因为它会耗尽内存。否则,没关系。

要实现这一目标,请使用准备好的过程来保护代码免受SQL注入攻击。

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();

/* Fetch all of the rows into an array */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);

?>

答案 1 :(得分:0)

您的代码对我来说很好。但我建议使用mysql_fetch_assoc()而不是mysql_fetch_array(),以便将键映射到它们的值。另外,使用mysql_real_escape_string()来防止SQL注入。

 $query = "Select * from processed1 where record = '".mysql_real_escape_string($id)."'";
 $result = mysql_query($query);

 $data = array();

 while($row = mysql_fetch_assoc($result))
 {           
     $data[] = $row;               
 }

答案 2 :(得分:0)

如果您尝试将所有数据库行存储到数组中,是的,该代码应该这样做。不过有几条评论:

  1. 正如curiou57建议的那样,使用mysql_fetch_assoc()能够通过名称引用单个行中的列。 (例如:foreach ($data as $row) { echo $row['columnname']; }
  2. 如果必须继续使用mysql扩展,请确保运行$idmysql_real_escape_string()。这可以防止SQL注入攻击。
  3. 如果您不必继续使用mysql扩展,请考虑使用PDO或mysqli。

答案 3 :(得分:0)

如果要通过数字索引引用每列,请切换到mysql_fetch_row()(注意,从零开始)。否则,这看起来是正确的。

如果您决定切换到PDO,则可以使用方便的PDOStatement::fetchAll()方法,使用PDO::FETCH_NUM获取样式将所有行作为数字数组提取到数组中。

答案 4 :(得分:0)

这是正确的方法:

while($rows[] = mysqli_fetch_assoc($result));
array_pop($rows);  // pop the last row off, which is an empty row