我是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]
答案 0 :(得分:4)
如果您打算在2011年学习PHP,那就让我们做吧。
首先,不推荐使用mysql_query或mysql_任何代码。不要再使用它了。
别担心 - 我建议使用的是mysql数据库,但它对任何数据库都有效:
其次,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)
如果您尝试将所有数据库行存储到数组中,是的,该代码应该这样做。不过有几条评论:
mysql_fetch_assoc()
能够通过名称引用单个行中的列。 (例如:foreach ($data as $row) { echo $row['columnname']; }
)$id
到mysql_real_escape_string()
。这可以防止SQL注入攻击。答案 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