我正在运行以下查询,并且它在大多数情况下都按预期运行,但偶尔会循环几次然后抛出此警告:
Warning: mysqli_stmt::fetch(): Couldn't fetch mysqli_stmt in...
我认为这与结果有关,但此时我不知所措。
$limit = 'LIMIT ' .($pagenum - 1) * $page_rows .',' .$page_rows;
$sql = "SELECT id, join_id, bus_name, first_name, last_name, address, city, state,
zip, phone, fax, email, wsaddr FROM auctioneer";
$bystate = " ORDER BY state ".$limit;//by state
$sortedLastSQL = " ORDER BY last_name ".$limit;// sort by last_name
$alphbeticalSql = " WHERE bus_name LIKE '".$order."%' ".$limit; //sort by letter
$sortOrderStSql = " WHERE state LIKE '".$order."%' ORDER BY state ASC ".$limit;
$sortOrderLnSql = " WHERE last_name LIKE '".$order."%' ORDER BY last_name,
first_name ASC ".$limit;
if(empty($_GET['sort']) && empty($_GET['order'])){
$sql = $sql.' '.$limit;
}
if(!empty($_GET['order']) && empty($_GET['sort'])){
$sql = $sql.$alphbeticalSql;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'state' && empty($_GET['order'])){
$sql = $sql.$bystate;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'last_name' && empty($_GET['order'])){
$sql = $sql.$sortedLastSQL;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'state' && !empty($_GET['order'])
&& $_GET['order'] = range('A','Z')){
$sql = $sql.$sortOrderStSql;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'last_name' && !empty($_GET['order'])
&& $_GET['order'] = range('A','Z')){
$sql = $sql.$sortOrderLnSql;
}
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $join_id, $bus_name, $first_name, $last_name,
$address, $city, $state, $zip, $phone, $fax, $email,$wsaddr);
while($stmt->fetch()){
//do a ton of stuff here
}
注意:此时这只是一个原始查询,没有安全措施用于调试目的。
答案 0 :(得分:0)
所以问题不在上面找到的更大的代码中,它包含在while循环本身中。
我有以下内容:
while($stmt->fetch()){
if($join_id != 0){
$sql3 = "SELECT count(*) FROM auctions WHERE join_id = ?";
$st = $conn->prepare($sql3);
$st->bind_param("i", $join_id);
$st->execute();
$st->store_result();
$st->bind_result($l);
$st->fetch();
$st->close();
}
}
将else { $l = 0; }
添加到if语句中,问题消失了。
这就是为什么我讨厌准备好的陈述,因为它总是一场疯狂的追逐!