繁体   English   中英

在PHP中以数组形式获取MySQL查询结果的最佳方法是什么?

[英]What is the best way to get MySQL query results as an array in PHP?

我是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]


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

首先,不建议使用mysql_query或mysql_任何代码。 不要再使用了。

不用担心-我建议的内容适用于mysql数据库,但也适用于任何数据库:

  • PDO是PHP社区继续向其中添加功能的地方,因此我会使用它。
  • PDO的功能也更强大,并且使以后切换数据库更加容易。
  • MYSQLi(我代表改进型)代替了不推荐使用的基于mysql_的查询,但是我肯定会直接使用PDO。
  • 您还可以轻松地创建对象数组,只需更改一行即可!

其次,菲尔提到了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);

?>

这是正确的方法:

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

您的代码对我来说很好。 但是我建议使用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;               
 }

如果您尝试将所有数据库行存储到一个数组中,是的,该代码应执行此操作。 不过,有几点评论:

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

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

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

暂无
暂无

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

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