mysqli_free_result():类mysqli_result的对象无法转换为字符串

时间:2010-07-16 02:04:05

标签: php mysql mysqli

就我对Google及其所有内容进行搜索,看起来这是一个非常常见的问题,但我似乎无法修复它。另外,我认为我对其他功能的使用方式有点不同。 并且,经过大约3个小时没有运气,我在这里张贴!

function free_result(){                                        # LINE 48
    $free = "SELECT SHOW DESCRIBE EXPLAIN";                    # LINE 49
    $free = explode(" ", $free);                               # LINE 50
    $sql = $this->sql;                                         # LINE 51
    while(list($key, $value) = each($free)){                   # LINE 52
        if(preg_match("/\b".$value."\b/", $sql)){              # LINE 53
            $result = $this->result;                           # LINE 54
            if(!mysqli_free_result($result)){                  # LINE 55
                $this->errors("Invalid result: <b>{$result}</b>. Couldn't free result."); # LINE 56
            }                                                  # LINE 57
        }                                                      # LINE 58
    }                                                          # LINE 59
}                                                              # LINE 60
                                                               # LINE 61
function query($sql){                                          # LINE 62
    $this->query_id = mysqli_query($this->connection, $sql);   # LINE 63
    $this->result = mysqli_store_result($this->connection);    # LINE 64
    $this->sql = $sql;                                         # LINE 65
    if(!$this->query_id){                                      # LINE 66
        $this->errors("Couldn't query: <b>{$sql}</b>");        # LINE 67
        return 0;                                              # LINE 68
    }                                                          # LINE 69
    $this->affected = mysqli_affected_rows($this->connection); # LINE 70
                                                               # LINE 71
    return $this->query_id;                                    # LINE 72
}                                                              # LINE 73

这些是我的数据库类中的2个函数。但我认为解决这个问题只需要这两个。

所以,我收到的错误是:

"Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, 
boolean given in [file path]\database.class.php  on line 55"
#followed by my database class error handling
"Invalid result: . Couldn't free result."

就我对此的理解而言,我认为问题出在 $ result 变量(LINE 54,LINE 64),但因为这是我第一次使用MySQLi进行冒险,那么我就是不太确定。

我希望你能理解这个问题并且能够提供帮助! 提前谢谢!

2 个答案:

答案 0 :(得分:1)

mysqli_store_result在两种情况下返回一个布尔值:对于update / insert / delete等,查询返回true(并且那些查询可以包含一个SELECT / SHOW / DESCRIBE / EXPLAIN例如,字符串),或SELECT / SHOW / DESCRIBE / EXPLAIN查询失败。检查$this->sql会告诉你哪个。如果您已经准备好释放这些结果,请在以下之前对其进行更简单的检查:

 function free_result(){ 
    if($this->result instanceof mysqli_result) $this->result->free();
 }

答案 1 :(得分:0)

该代码看起来是正确的,除了 store_result 在没有结果集(例如插入)或错误时可以返回FALSE。如果mysqli_field_count非零,则 应返回结果集。看起来你正在使用$ free数组检查这个(但是field_count应该更快更准确)。如果mysqli_error返回非空字符串,则表示存在错误。