就我对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进行冒险,那么我就是不太确定。
我希望你能理解这个问题并且能够提供帮助! 提前谢谢!
答案 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
返回非空字符串,则表示存在错误。