[英]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数据库,但也适用于任何数据库:
其次,菲尔提到了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;
}
如果您尝试将所有数据库行存储到一个数组中,是的,该代码应执行此操作。 不过,有几点评论:
mysql_fetch_assoc()
能够通过名称来引用单个行中的列。 (例如: foreach ($data as $row) { echo $row['columnname']; }
) mysql_real_escape_string()
运行$id
。 这样可以防止SQL注入攻击。 如果要通过数字索引引用每个列(请注意,从零开始mysql_fetch_row()
,请切换到mysql_fetch_row()
)。 否则,这看起来是正确的。
如果决定切换到PDO,则可以使用方便的PDOStatement::fetchAll()
方法,并使用PDO::FETCH_NUM
提取样式将所有行作为数字数组提取到数组中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.