MySQLi 相当于 mysql_result()?

2022-08-30 10:46:10

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

难道没有与旧函数等效的函数吗?mysql_result()

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

旧代码:

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'];  
}

答案 1

以下函数完全复制该函数,并在请求越界时返回(空结果,没有该数字的行,没有该数字的列)。它确实具有额外的好处,即如果不指定行,它将假定为0,0(要传递的值少一个)。该函数允许字段或字段名称的数字偏移量。mysql_result()false

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;
}

答案 2

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

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

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

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

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


推荐