【问题标题】:How to Retrieve 1 Result from Custom MySQL fetch Function如何从自定义 MySQL fetch 函数中检索 1 个结果
【发布时间】:2012-05-16 15:46:31
【问题描述】:

昨天另一位用户帮助构建了一个通用函数来处理 MySQL 查询。它看起来像这样:

function fetchAll($query) {
  $res = mysql_query($query) or trigger_error("db: ".mysql_error()." in ".$query);
  $a   = array();
  if ($res) {
    while($row = mysql_fetch_assoc($res)) { 
        $a[]=$row;
    }
  }
  return $a;
}

为了输出返回的结果,我只需执行以下操作:

$data = fetchAll("SELECT * FROM news_table ORDER BY id LIMIT 10");

foreach ($data as $row) {
    echo $row['title'];
}

我的问题与在数组中只有一个结果时输出结果有关。就像显示页面的当前博客文章时一样。我想知道我是否可以在不先调用 foreach 循环的情况下做到这一点?有没有办法只输出数组的第一个结果,因为我不需要循环遍历它。

也许我可以有一个替代函数,而不是上面的 fetchAll() 函数?只输出一行?

干杯,

斯科特

【问题讨论】:

  • 为什么不将查询限制为 1 ?
  • 并且不要使用直接查询。建造它们。否则不安全。
  • 即使我 LIMIT 1,它仍然不会返回值,除非我使用 foreach 循环。 @Corbin,我想知道如何按照您的建议创建一个 fetchOne() 函数!
  • 只返回 mysql_fetch_assoc 的值,而不是构建一个数组。我这样说是为了提供帮助,而不是刻薄,但您可能应该考虑重新审视该语言的基础知识。
  • @Corbin,哦,别误会我的意思。我已经使用标准函数十多年了。我一直想尝试使用更简化的方法来获取数据(没有 PDO)。

标签: php mysql database function


【解决方案1】:

只计算数组

 if(count($data) == 1) {
     // Only one dataset
 } else if(count($data) > 0) {
     // foreach
 } else {
     // no content
 }

【讨论】:

  • 如果 count($data) === 0,foreach 将失败
【解决方案2】:

是的。例如:

echo $data[0]['title'];

基本上,您的 $data 是一个二维数组,第一个维度是行号(计数从 0 开始),因此如果您知道行号,则可以直接访问任何行。如果你只有一行,它一定是 0。

【讨论】:

  • 非常感谢!说得通。它不像 echo $data['title']; 那样漂亮。但它会做 - 我使用的这个功能的好处意味着更少的代码行。所以值得。
【解决方案3】:
echo $data[0]['title'];

应准确打印您要查找的内容。在二维数组中,第一个维度是数组索引,因为数组索引从 0 开始,上面的代码将回显该数组中的第一行。

【讨论】:

  • 谢谢达伦。看起来你和上面的海报同意。如果我只想检索一行,是否有更好的功能可以使用?
  • 虽然不是最美观的,但您接受的答案是最好的。
猜你喜欢
  • 1970-01-01
  • 2012-06-08
  • 2021-09-26
  • 2018-02-17
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
相关资源
最近更新 更多