我正在将一些旧的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'];  
}
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;
}
Cla*_*ger 15
PHP 5.4现在支持函数数组解除引用,这意味着你可以这样做:
if ($r && $r->num_rows)  
{  
    $row = $r->fetch_assoc()['blah'];  
}
你可以通过获取一个对象而不是一个数组来做到这一点。
$mysqli->query("SELECT email FROM users WHERE userid = 'foo'")->fetch_object()->email;
您需要 PHP 5+ 才能使用这样的方法链。
或者,如果您使用过程 MySQLi,则很容易编写自己的mysqli_result匹配mysql_result.