MySQLi 相当于 mysql_result()?

新手上路,请多包涵

我正在将一些旧的 PHP 代码从 mysql 移植到 MySQLi,但我遇到了一个小问题。

有没有等同于旧的 mysql_result() 功能?

我知道 mysql_result() 在处理超过 1 行时比其他函数慢,但很多时候我只有 1 个结果和 1 个字段。使用它可以让我将 4 行压缩为 1 行。

旧代码:

 if ($r && mysql_num_rows($r))
    $blarg = mysql_result($r, 0, 'blah');

所需代码:

 if ($r && $r->num_rows)
    $blarg = $r->result(0, 'blah');

但是没有这样的事情。 :(

有什么我想念的吗?或者我将不得不接受并制作所有内容:

 if ($r && $r->num_rows)
{
    $row = $r->fetch_assoc();
    $blarg = $row['blah'];
}

原文由 DOOManiac 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 548
2 个回答

PHP 5.4 现在支持 函数数组取消引用,而 7.0 支持 空合并运算符,这意味着您可以简单地执行以下操作:

 $value = $r->fetch_assoc()['blah'] ?? false;

甚至更通用的变体,您不需要提供列名,

 $value = $r->fetch_row()[0] ?? false;

请注意,您甚至不需要 if ($r && $r->num_rows) 条件。

原文由 Clamburger 发布,翻译遵循 CC BY-SA 4.0 许可协议

以下函数完全复制 mysql_result() 函数,并返回 false 当您的请求超出范围时(空结果,没有该数字的行,没有该数字的列).它确实有额外的好处,如果您没有指定行,它会假定为 0,0(要传递的值少一个)。该函数允许字段 或字段名称的数字偏移量。

 function mysqli_result($res,$row=0,$col=0){
    $numrows = mysqli_num_rows($res);
    if ($numrows && $row <= ($numrows-1) && $row >=0){
        mysqli_data_seek($res,$row);
        $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
        if (isset($resrow[$col])){
            return $resrow[$col];
        }
    }
    return false;
}

原文由 Mario Lurig 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题