如何通过php中的mysql查询逐行迭代
Posted
技术标签:
【中文标题】如何通过php中的mysql查询逐行迭代【英文标题】:How to iterate by row through a mysql query in php 【发布时间】:2011-01-18 03:22:48 【问题描述】:好的,所以我正在尝试查询我的数据库并选择所有具有特定值的行。 之后,我使用 mysql_fetch_array() 将查询转换为数组,然后尝试使用 for each 循环逐行遍历获取的数组。
<?php
$query = mysql_query("SELECT * FROM users WHERE pointsAvailable > 0 ORDER BY pointsAvailable Desc");
$queryResultArray = mysql_fetch_array($query);
foreach($queryResultArray as $row)
echo $row['pointsAvailable'];
?>
虽然当我对除 pointsAvailable 列之外的任何列执行此操作时,都会说一个名为“名称”的文本类型的列,它只返回一个字母。
如何逐行遍历返回的查询,并允许从当前行获取特定列的数据?
【问题讨论】:
【参考方案1】:$result = mysql_query("SELECT id, name FROM mytable");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
printf("ID: %s Name: %s", $row[0], $row[1]);
或使用 MYSQL_ASSOC 将允许您使用命名列
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
printf("ID: %s Name: %s", $row["id"], $row["name"]);
【讨论】:
谢谢你工作得很好。那么每次在查询资源上调用mysql_fetch_array时它实际上只返回一行吗? 每次调用 mysql_fetch_array 时,它都会返回当前行并将数据指针向前移动到下一行。遍历完所有行后返回false,while循环结束。【参考方案2】:是的,使用mysql_fetch_array($result)
是可行的方法。
【讨论】:
【参考方案3】:随着 PHP 7+ 成为新标准并且 mysql_fetch_array 被弃用,您将需要开始使用 mysqli_fetch_array。
面向对象的风格
$result = $mysqli->query($query);
/* numeric array */
while ($row = $result->fetch_array(MYSQLI_NUM))
// Do stuff with $row
/* associative array */
while ($row = $result->fetch_array(MYSQLI_ASSOC))
// Do stuff with $row
/* associative and numeric array */
while ($row = $result->fetch_array(MYSQLI_BOTH))
// Do stuff with $row
程序风格
$result = mysqli_query($mysqli, $query);
/* numeric array */
while ($row = mysqli_fetch_array($result, MYSQLI_NUM))
// Do stuff with $row
/* associative array */
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
// Do stuff with $row
/* associative and numeric array */
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH))
// Do stuff with $row
您可以在 PHP 圣经中阅读有关此更改的更多信息。
https://www.php.net/manual/en/mysqli-result.fetch-array.php
【讨论】:
以上是关于如何通过php中的mysql查询逐行迭代的主要内容,如果未能解决你的问题,请参考以下文章