在这个例子中如何将mysql_result转换为mysqli结果?

时间:2014-09-16 12:30:33

标签: mysqli

我理解如何在mysqli中获取结果,但是如何为mysqli编写这个例子?

$t=mysql_query($query);
return (mysql_result($t, 0) === '1') ? true : false; 

第一行很简单,但你如何做第二行呢?

$t=mysqli_query($mysqli, $query);
return (mysql_result($t, 0) === '1') ? true : false; 

我用mysqli_result替换了mysql_result,它似乎有效,但我的编辑器并不认识mysqli_result作为php的一部分。

只想检查这是否正确。

谢谢你看看。

2 个答案:

答案 0 :(得分:1)

尝试

$t=mysqli_query($mysqli, $query);
return (mysqli_result($t, 0) === '1') ? true : false; 


function mysqli_result($res, $row, $field=0) { 
    $res->data_seek($row); 
    $datarow = $res->fetch_array(); 
    return $datarow[$field]; 
} 

答案 1 :(得分:-1)

我用过这个解决方案,但有一个问题!

mysql_result支持结果集中的表前缀

SELECT a.timestamp, b.timestamp FROM table a, table b

使用mysql_result,可以直接使用

访问这些结果
mysql_result($res,0,"a.timestamp");

虽然使用mysql_fetch关联这是不可能的,因为第一个时间戳将被第二个时间戳覆盖。 但是,如果您将结果作为数字返回,并且扫描结果集的字段,则可以模仿此项:

function mysqli_result($result, $row, $field) {

    $result->data_seek($row);

    // for no table prefix just go ahead and fetch assoc
    if ( strstr($field, ".") === false ) {
        // Fetch result array
        $data = $result->fetch_assoc();

        return $data[$field];
    }

    // workaround for assoc use and overwriting fieldnames like "a.timestamp" and "b.timestamp"
    list($tablename,$fieldname) = explode(".",$field);
    $resultData = $result->fetch_array(MYSQLI_NUM);

    foreach( $result->fetch_fields() as $index => $fieldData ) {

        if ( $fieldData->table == $tablename && $fieldData->name == $fieldname ) {
            return $resultData[$index];
        }
    }

    return false;
}

现在可以像以前一样使用mysqli_result($ res,0,“a.timestamp”);