MySQLi相当于mysql_result()?

DOO*_*iac 40 php mysqli

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

有没有相当于旧mysql_result()功能?

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

旧代码:

if ($r && mysql_num_rows($r))  
    $blarg = mysql_result($r, 0, 'blah');
Run Code Online (Sandbox Code Playgroud)

期望的代码:

if ($r && $r->num_rows)  
    $blarg = $r->result(0, 'blah');
Run Code Online (Sandbox Code Playgroud)

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

有什么我想念的吗?或者我将不得不吮吸它并做出一切:

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

Mar*_*rig 35

虽然回答,我想我可以提高在具有同样的问题后给出了答案.以下函数完全复制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;
}
Run Code Online (Sandbox Code Playgroud)

  • 该功能已更新.以前,$ col必须是数字偏移量.现在,它也接受字段名称. (2认同)

Cla*_*ger 15

PHP 5.4现在支持函数数组解除引用,这意味着你可以这样做:

if ($r && $r->num_rows)  
{  
    $row = $r->fetch_assoc()['blah'];  
}
Run Code Online (Sandbox Code Playgroud)


Her*_*eon 5

你可以通过获取一个对象而不是一个数组来做到这一点。

$mysqli->query("SELECT email FROM users WHERE userid = 'foo'")->fetch_object()->email;
Run Code Online (Sandbox Code Playgroud)

您需要 PHP 5+ 才能使用这样的方法链。

或者,如果您使用过程 MySQLi,则很容易编写自己的mysqli_result匹配mysql_result.